2017-01-19 3 views
2

Q에서 Collatz 시퀀스를 구현하려고합니다 (초급 운동). 첫 번째 값을 얻는 것은 쉽습니다.Q에서 Collatz 시퀀스

collatz:{`long$$[0j~x mod 2;x%2;1+3*x]} 

위의 코드는 분명히 제어 구조를 포함하지 않습니다. 나는 등

2 collatz/ x 

... 3,4에 의해 내가 다른 요소를 계산할 수 있다는 것을 알고 있습니다 .. 그러나 전체 목록 (순서)을 얻을 나의 시도가 완전히 쓸데했다 ... 나는 시도 :

til 5 collatz/ x 

1 2 3 collatz/ x 

아무것도 작동하지 않습니다 ...

답변

1

내가 올바르게하는지 이해한다면 여기 일을하려고, 다음이 기능을 작동합니다

collatz\[5;x] 

이 백 슬래시의 "반복 처리"사용 사례이며, 입력이 "X"무엇에 다섯 번 반복 수행이 경우입니다. (1)에 수렴하기 위해

q)collatz\[5;1] 
1 4 2 1 4 2 
+1

http://code.kx.com/q/ref/adverbs/#converge-iterate

, 당신으로 표기 inifix 사용하여 '(1 <>) collatz \ 5' 또는 대안 적으로'collatz \ 같이 1 <> 5]'. 캐스트와 긴 비교를 제거하여 함수를 단순화 할 수도 있습니다.'collatz : {$ [x mod 2; 1 + 3 * x; x div 2]} ' – dstrachan

+0

두 답변 모두에 감사드립니다. 이제 완벽하게 작동합니다. –

+0

다행입니다. 당신이 언어를 즐기고 당신의 학습에 대한 행운이 있기를 바랍니다. –