2012-02-08 2 views
1

학년 위/아래 APL 순서

⍋'Hello' 

1 2 3 4 5 

⌽(⍒'Hello') 

1 2 4 3 5 

것을 온 어떻게?

나는 APL을 처음 접해 우연히 만난다. 나는 두 번째 이유가 첫 번째 이유 앞에 오는 이유를 그냥 찾았습니다.

답변

2

모나드 프리미티브로 등급과 등급을 모두 사용하고 있습니다. 정의에

등급은 최대 승순 에서는, 다음 식의 소트 순서를 지정하는 인덱스의 정수 배열을 반환한다. 요소가 같으면 (예 : 두 글자), 입력 표현식에 나타난 순서와 동일한 순서로 결과에 나타납니다.

따라서 ⍋'Hello'1 2 3 4 5을 반환합니다. 두 개의 문자는 같은 순서로, 즉 세 번째 문자 (첫 번째 문자 l)가 네 번째 문자 (두 번째 문자 l) 앞에옵니다. 등급은 아래 내림차순 에, 그것을 다음과 같은 식의 정렬 순서를 지정 인덱스의 정수 배열을 반환 정의에

. 요소가 같으면 (예 : 두 글자), 표현식에 나타난 순서와 동일한 순서로 결과에 나타납니다.

따라서 ⍒'Hello'5 3 4 2 1을 반환합니다. 두 사람은 동등한 관계로 같은 순서로 남아 있습니다. 회전을 적용하면 정수 배열은 목격하면 1 2 4 3 5으로 바뀝니다.

보고있는 결과는 함수가 정의 된 방식과 동일한 값을 처리하는 방식에 따라 달라집니다.

더 극단적 인 예를 보려면 다음 두 배열의 출력을 비교하십시오.

⍋10⍴1 

⍒10⍴1 

그들은 모두를 얻을 것입니다 : 10 개 요소 각 1 10⍴1의 동일한 값을 갖는 다음 시도하십시오 등급 아래로 기능을 기능을 등급을 시도하고 배열을 만들기 같은 결과 :

1 2 3 4 5 6 7 8 9 10 
+0

그래서 동일한 스칼라가 여러 번 연속으로 나타나면 아무리 작은 값에서 높은 값으로 돌아갈 수 있습니까? – f2lollpll

+0

예. 함수는 동일한 스칼라가 나타날 때 규칙을 필요로합니다 (인접하지 않아도 됨). 구현 된 규칙은 제시된 순서가 정확하고이를 유지한다는 것을 신뢰하는 것입니다. 그것이 낮은 것에서 높은 것으로 말하는 것은 정말로 정확하지 않습니다. 그것은 왼쪽에서 오른쪽으로 생각하는 것이 더 좋을 것입니다. –

0

그레이드 업 및 그레이드 다운 프리미티브는 동일한 요소의 순서를 유지합니다. 다른 사람들이 말했듯이 동등한 논증에 대한 규칙이 있어야합니다. 그러나이 규칙은 다중 키 정렬을 허용한다는 장점이 있습니다. 즉, 여러 개의 연관된 키가있는 배열이있는 경우 각 키를 최하위부터 최상위까지 정렬하여 가장 중요한 키로 정렬 된 결과를 얻습니다. 두 번째 mot 중요도 순으로 정렬 된 equals 첫 번째 두 번째는 세 번째로 정렬됩니다. 이 작업을 수행하려면 인덱스 벡터를 캡처하여 모든 키와 데이터를 업데이트하여 동기화 상태로 유지해야합니다. 또는 중첩 된 구조로 저장 될 수 있습니다.이 경우 중첩 된 구조는 자동으로 적절한 상대 순서로 유지됩니다.

+0

다중 키 조건을 하나의 효과적인 비교 함수로 결합 할 수 있습니다.이 비교 함수는 불안정한 정렬로 정상적으로 작동합니다. (순서가되는 유일한 의미는 모든 단일 키에서 동일한 요소가 유지되지 않는다는 것입니다.) 우리가 비교에서 고려하지 않은 키를 보존하려면 안정적인 정렬이 필요합니다. 예 : 성을 기준으로 정렬하지만 동일한 성을 실행하려면 성을 순서대로 유지하십시오. 성 순서에 따라 안정적인 정렬이 필요합니다. – Kaz