기능을 일반적인 방법으로 생성 Collatz 시퀀스를 작성 후 :스키마/라켓에서 펼치기를 사용하여 Collatz 시퀀스를 작성하는 방법은 무엇입니까?
(define (colatz-seq #;[email protected] n)
(cond ((= n 1) '())
((even? n) (cons (/ n 2) (colatz-seq (/ n 2))))
((odd? n) (cons (+ (* n 3) 1) (colatz-seq (+ (* n 3) 1))))))
나는 펼쳐 사용하여 쓰고 싶다 :
(define (next-colatz-step n)
(cond ((even? n) (/ n 2))
((odd? n) (+ (* n 3) 1))))
(define (one? n)
(= n 1))
(define (colatz-seq #;[email protected] n)
(unfold one? next-colatz-step next-colatz-step n))
을 그리고 예상대로 그러나 나는 그것이없이 작동 할 수 없었다 작동 두 번째 및 세 번째 매개 변수로 "next-colatz-step"을 사용합니다. 왜? 두 개의 매개 변수에 동일한 인수를 제공하는 것이 이상하게 보입니다.
왜 않습니다 가'((하나 N) (목록 1) 정의)' 이 PARAM로 N이조차 힘든 그것을 사용하지 않는거야? – X10D
@ X10D는 'unfold'가 마지막 인수로 one-arg 프로 시저를 기대하기 때문에 발생하지만, 마지막 값은 '1'이어야한다는 것을 이미 알고 있습니다. 그러나 재귀 함수'n' _is_'1'의 그 시점에서 매개 변수를 사용하도록 업데이트했습니다. –