다음은 값이 x를 초과하지 않는 목록으로 피보나치 시퀀스를 작성하는 방법입니다 .
(define (fibs-upto x)
(for/list ([i (in-naturals)]
#:break (> (fib i) x))
(fib i)))
을 사용 #:break
하지 않고 #lang lazy
무한 게으른 목록을 작성하는 데 사용하지 않고 이것을 수행하는 또 다른 방법이 있습니까?
다음은 (fib i)
한 번만 평가 되는 솔루션입니다 .
(define (fibs-upto x)
(for*/list ([i (in-naturals)]
[fib-i (in-value (fib i))]
#:break (> fib-i x))
fib-i))
그러나 표준 루프를 읽는 것이 더 쉬울 수 있습니다.
(define (fibs-upto x)
(define (loop i)
(define fib-i (fib i))
(if (> fib-i x)
'()
(cons fib-i (loop (+ i 1)))))
(loop 0))
즉, fib
위의 솔루션에 대해 이전에 계산 된 값을 O(n)
.
최신 정보
다음을 사용하는 버전 sequence-map
:
(define (fibs-upto x)
(for/list ([y (sequence-map fib (in-naturals))]
#:break (> y x))
y))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다