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
과 같지 않습니까?
나는 완전히 뒤죽박죽이다. 내가 뭘 놓치고 있니? 나는 결계의 정의와 그것의 바깥 쪽 모두에서 계급을 가지고 놀았다. 나는 단지 그것을 얻지 않는다.