2014-04-03 21 views
3

我一直在4Clojure遇到問題。有Problem 26這需要您先生成n斐波納契數字。我想用偷懶序列和匿名函數來解決它,這是我的解決方案:4clojure與本地Clojure不一致

#(let [fib-seq (lazy-seq (map + 
    (cons 0 (cons 0 fib-seq)) 
    (cons 1 fib-seq)))] 
    (take % fib-seq)) 

它正常工作時,我測試了各種參數蘋果酒(Emacs的),但4clojure拒絕這一解決方案,使得以下情況除外:

java.lang.RuntimeException: Unable to resolve symbol: fib-seq in this context, compiling:(NO_SOURCE_PATH:0) 

你知道他們爲什麼會表現不一致嗎?我的Clojure的本地版本是1.5.1

編輯:這對我來說到底有什麼工作:

#(letfn [(fib-seq [] 
    ((fn rfib [a b] 
     (cons a (lazy-seq (rfib b (+ a b))))) 
      1 1))] 
    (take % (fib-seq))) 

回答

3

我懷疑你有你的REPL會話fib-seqvar。這在新的REPL中不起作用。 let中的綁定不能指向其左側。也就是說,按照Scheme的說法,Clojure的let不是letrec。您可以用letfn來代替。

+0

我想通了,在此期間:)的'letfn'解決方案不被支持。謝謝。 –

0

在4clojure使用clojure.jar的是1.5版之前,因爲減少了功能(在clojure.1.5支持)在4clojure