我一直在嘗試使用定義數據類型方法在方案中編寫斐波納契程序,但無法這樣做。請告訴我它是如何完成的。Scheme中的Fibonacci程序(使用define-datatype)
我已經寫了下面的表示獨立性代碼:
(define (top-k k)
k)
(define (applyk k n)
(k n))
(define (fibind n k)
(cond
[(= n 0) (k 1)]
[(= n 1) (k 1)]
[else (fibind (- n 1) (fib1 n k))]))
(define fib1
(lambda (n k)
(lambda (v)
(fibind (- n 2) (lambda (w) (k (+ v w)))))))
編輯:我基本上要一個代碼(類似於下面的一個)發現斐波那契數
;;;;k:: []-> continuation?
(define-datatype k k?
[topk]
[fact1-k (n number?) (saved-k k?)])
;;;appylk:: nat? continuation? -> nat?
(define apply-k
(lambda (v c)
(cases k c
[topk() v]
[fact1-k (n saved-k)
(apply-k (* n v) saved-k)])))
;;;fact :: nat? continuation? -> nat?
(define (fact n k)
(if (< n 2)
(apply-k n k)
(fact (- n 1) (fact1-k n k))))
什麼是「define-datatype」方法?你顯示的代碼看起來像是繼續傳遞樣式,但不是(正如你所知)正確... –
其實上面的代碼工作。它的CPS版本可以找到第n個斐波那契數字。 你可以嘗試使用:(fibind 5 top-k)或者放置任意數字n而不是4. – sudshekhar
哦,對不起,那麼。我認爲,既然你說你無法編寫代碼,併發布了一些代碼,你發佈的代碼不起作用。我的錯。那麼你能澄清一下你在做什麼嗎? –