:하지만, 난 그냥이 최종 세부 사항을 파악하고 일이 내 머리에 가야 계획에 모양을 보여줘 사람이 필요 "논평은 실제로 그것이 그렇게 멀지 않다는 데모를 요청했습니다. 첫째, 직접 번역 :
(define (sum-fibonacci-values)
(define n 4000000)
(define i2 1)
(define i1 1)
(define fibo 0)
(define temp 1)
(let loop()
(when (< i2 n)
(set! temp (+ i1 i2))
(set! i1 i2)
(set! i2 temp)
(when (zero? (modulo i2 2)) (set! fibo (+ fibo i2)))
(loop)))
(write fibo))
둘째, 중복 변이를 제거함으로써, "관용"만들고, 대신 새 값을 결합하고, 꼬리 재귀 루프를 사용. 이 코드는 원래와 직접적인 상관 관계가 여전히 참고 :
(define (sum-fibonacci-values)
(define n 4000000)
(let loop ([i2 1] [i1 1] [fibo 0] [temp 1])
(if (< i2 n)
(let* ([temp (+ i1 i2)]
[i1 i2]
[i2 temp]
[fibo (if (zero? (modulo i2 2)) (+ fibo i2) fibo)])
(loop i2 i1 fibo temp))
fibo)))
마지막으로, 지금은 코드가 명확 것으로, 일부 중복이 있다는 것을 알 수있다. 다음은 정리 된 버전입니다.
(define (sum-fibonacci-values)
(define n 4000000)
(let loop ([i2 1] [i1 1] [fibo 0])
(if (< i2 n)
(let ([i3 (+ i1 i2)])
(loop i3 i2 (if (zero? (modulo i3 2)) (+ fibo i3) fibo)))
fibo)))
Java 코드에서 동일한 정리 작업을 수행 할 수 있습니다. (그러나 그것은 독자에게 운동으로 남았습니다 ...)
그래서 코드 생성 기계가 아닙니다. –
코드 생성을 요구하지 않고 코드 변환을 요청합니다. 나 자신의 코드를 작성할 수는 있지만, 여기에 Scheme에 게시하는 것과 같은 것을 작성한 적이 없으며 이것이 어떻게 진행되는지 파악하는 데 도움이 필요하다. – Tsundoku
나는 Scheme에 대한 직접적인 "상태있는"매핑이 가능하다고 생각하지만,이 프로그램의 관용적 인 Scheme 구현은 매우 달라 보일 것이다. 저의 스킴 기술은 녹슨 것이므로 답변에 기여할 수는 없지만 경고해야합니다. –