2016-12-13 5 views
2

APL에는 다른 숫자를 "디코딩"하는 데 사용되는 기본 함수가 있습니다. 함수의 왼쪽에는 다른 숫자의 각 숫자와 연관된 자리 값을 넣습니다. . 그러나왜 APL의 ⊥- 디코드에 기수 벡터에 여분의 숫자가 필요합니까?

2 2 2 2 ⊥ 0 1 0 1 ⍝ (What you type in) Convert 0101 form base 2 into base 10 
5      ⍝ (What the interpreter computes) 

, 기수 벡터 2 맨 왼쪽이 어떤 디코딩 계산에 사용되지 않습니다 : 오른쪽에 당신은 당신이에 관심이있는 예를 들어

숫자의 벡터를 넣어. 예 :

 ¯48 2 2 2 ⊥ 0 1 0 1 ⍝ We can replace the leftmost radix digit with a random number 
5       ⍝ Same answer as before 

     ¯48 2 2 2 ⊥ 1 1 1 1 ⍝ Just to prove that the leftmost decode digit is unused 
15      ⍝ Correct decode of 1111 

     65 2 2 2 ⊥ 1 1 1 1 ⍝ Try another random number for testing 
15      ⍝ Again, the correct answer is output 

따라서 가장 왼쪽 숫자를 사용하지 않으면 왜 APL에서 필요합니까? (특히, APL은 기수 벡터와 입력 벡터가 같은 길이를 가져야합니다.) 내가 모르고있는 디코딩 함수에 어떤 용도가 있습니까?

+0

아마 가장 왼쪽의 값 자리가 범위 내에 있는지 확인하는 데 사용됩니까? – jasonharper

+0

흠, 좋은 생각. 그러나 통역사는 불평하지 않는 것 같습니다. '2 2 2 2 ⊥ 44 1 1 1'은'359'을 말합니다. – Mahkoe

답변

1

명세서 특히

는, APL은 부분적으로 만 옳다 모두 ... 같은 길이

을해야합니다. Dyalog APL Manual에서 인용 :

X 및 Y는 순응성이다 X의 최종 축 길이는 스칼라 또는 1 요소 벡터가 연장된다 Y.의 제 1 축 길이와 같은 경우 필요한 길이의 벡터. X의 마지막 축 또는 Y의 첫 번째 축의 길이가 1 인 경우 배열은 다른 인수와 일치하도록 해당 축을 따라 확장됩니다.

따라서 2 ⊥ 1 1 1 115을 계산하기에 충분합니다.

나는 좋은 설명 here을 찾았지만, 해당 페이지가 글꼴 문제가있다, 나는 적절한 글꼴을 재현합니다 :

가 B에서 문 Q←B⊥R의 기수 벡터, 우리는 가중치 벡터를 계산 , W을 평가의 첫 단계로 사용하십시오. 구체적인 예를 사용하여 다음과 같이 0 3 12 ⊥ 4 2 7 (인치 야드 피트 인치 변환) B에서 가중치 벡터를 계산 :

inches per yard: 3⊥12 or 36 
inches per foot: 12 
inches per inch: 1 

가중 벡터 36 12 1이다. APL에서 가중치 벡터를 계산하는 과정은 다음과 같이 쓸 수 있습니다.

 N←⍴B    ⍝ Length of B 
     W←N⍴0    ⍝ Give W the proper shape 
     W[1]←×/1↓B   ⍝ Product of all but the first element of B 
     W[2]←×/2↓B   ⍝ Product of all but the first 2 elements of B etc. 
     .    ⍝ etc. 
     . 
     . 
     W[N-1]←×/(N-1)↓B ⍝ Next to last element of W is last element of B 
     W[N]←1    ⍝ Last element of W is always I 

B의 첫 번째 요소는 사용되지 않았습니다. 인코딩의 평가를 완료하려면 W 배 R의 합을 :

 Q←+/W×R 

이 결과는 B⊥R입니다. 우리의 구체적인 예를 들어 :

 36 12 1 ⊥ 4 2 7 
144 24 7 

     144 + 24 + 7 
175 
     0 3 12 ⊥ 4 2 7 
175 
+0

"B의 첫 번째 요소는 사용되지 않았습니다." 바로 내 요점; 사용하지 않으면 왜 그곳에 있어야합니까? APL이 메모리 정렬 등을 위해 필요하기 때문입니까? – Mahkoe

+1

흠, 나는 그에 대한 확실한 답을 가지고 있지 않지만, 아마도 ... * 왼쪽 인수는 역 연산을 수행하는 데 사용될 수 있으며, _then_ 첫 번째 요소는 의미가 있습니다. * 아마 구현자는 대칭성을 좋아합니다. args ... – MBaas

0

나는 MBaas '우수 대답에 추가 할 아무것도하지 않는,하지만 난 에 대한 IBM 메인 프레임에 APL2에서의 버그를 공유 할 수 있습니다.

다른 사람들에게 흥미가있을 수 있으므로, 별도의 질문으로 넣어 드리겠습니다 : LINK.

0

짧은 대답은 ⊥에 대한 인수가 순응 할 필요가 있다는 것입니다.

2 2 2 2 ⊥ 1 1 1 1  ⍝ ok 
2 2 2 2 ⊥ 1 1 1 1 1  ⍝ length error 
     2 ⊥ 1 1 1 1  ⍝ scalar extension of the left argument 
2 2 2 2 ⊥ 1    ⍝ scalar extension of the right argument 

인수 높은 순서 배열로 확장 ⊥하고, 내적 같이 왼쪽 인자의 마지막 차원은 권리의 첫 번째 차원과 일치해야합니다.