2011-08-07 7 views
3

J에서 부사와 접속사를 가지고 놀고 있는데 이상한 문제가 있습니다. 숫자의 디지털 합 또는 디지털 합계를 계산할 때 생성 된 숫자의 진행을 보는 데 사용할 수있는 persistence이라는 간단한 부사를 정의했습니다.J에서 접속사를 정의 할 때 이상한 길이 오류가 발생했습니다.

S =: 1 : 'u/@:("."0)@":^:a:"0' 

+ S 234은 우리에게 234 9을 제공합니다. 그런 다음 이것을 사용하여 숫자의 지속성을 계산하는 또 다른 부사를 작성했습니다.

P =: 1 : '<:@#@(u S)"0' 

+ P 234은 우리에게 1을 제공합니다.

19 10 1 
28 10 1 
29 11 2 

: 자, 그러면 다음 목록을 생성합니다, 우리는 2의 첨가제 지속성 30 아래의 모든 번호를 찾으려면 다음 예를 들어, 각 번호에 대한 S에 의해 생성 된 목록을 볼

+ S I. 2 = + P i.30 

상상 여태까지는 그런대로 잘됐다. 이제 이것을 가져 와서 결합으로 바꾸고 싶습니다. 왼쪽에는 지속성에 사용할 동사가 들어 있고 오른쪽에는 목록을 제한하는 데 사용되는 숫자가 포함되어 있습니다. (위의 예에서 2합니다.) 여기에 함께 내 정의입니다 :

+/@:("."0)@":^:a:"0 I. 2 = <:@#@(+/@:("."0)@":^:a:"0)"0 

이 정확히 올바른 : 나는 J 콘솔에 표현 + Q 2를 입력하면

Q =: 2 : 'u S I. n = u P' 

, 나는 다음과 같은 돌아가 내가 인수 등 i.30와 전체 표현을 실행하는 경우, 그리고 그것을 잘 작동합니다 :

+/@:("."0)@":^:a:"0 I. 2 = <:@#@(+/@:("."0)@":^:a:"0)"0 i.30 

을 그러나, 나는 전을 입력 할 때 press + Q 2 i.30을 J 콘솔에 넣으면 '길이 오류'가 다시 발생합니다. 왜?! + Q 2은 정확히 +/@:("."0)@":^:a:"0 I. 2 = <:@#@(+/@:("."0)@":^:a:"0)"0과 같지 않습니까?

나는 완전히 뒤죽박죽이다. 내가 뭘 놓치고 있니? 나는 결계의 정의와 그것의 바깥 쪽 모두에서 계급을 가지고 놀았다. 나는 단지 그것을 얻지 않는다.

답변

3

+ Q 2은 입력 한 표현식과 정확히 동일하지만 표현식에서 사용할 때 괄호 안에있는 것처럼 표현됩니다. 일반적으로 f g h y에서

+/@:("."0)@":^:a:"0 I. 2 = <:@#@(+/@:("."0)@":^:a:"0)"0 i.30 
19 10 1 
28 10 1 
29 11 2 
    (+/@:("."0)@":^:a:"0 I. 2 = <:@#@(+/@:("."0)@":^:a:"0)"0) i.30 
|length error 

! = (f g h) y. 후자의 경우 f g htrain을 정의합니다.

Q=: 2 : 'u S I. n = u P y' 
    + Q 2 i.30 
19 10 1 
28 10 1 
29 11 2 
: 당신은 이런 식으로 Y에 대한 참조를 추가하여 함께 문제를 해결할 수 있습니다

avg=: +/ % # 
    +/ % # 1 2 3 
0.333333 
    (+/ % #) 1 2 3 
2 
    avg 1 2 3 
2 

: 예를 들어,