Recursion 4 Clojure与本地Clojure不一致

Recursion 4 Clojure与本地Clojure不一致,recursion,clojure,fibonacci,Recursion,Clojure,Fibonacci,我在学校里遇到了很多问题。这就需要你生成前n个斐波那契数。我想用惰性序列和匿名函数解决它,这是我的解决方案: #(let [fib-seq (lazy-seq (map + (cons 0 (cons 0 fib-seq)) (cons 1 fib-seq)))] (take % fib-seq)) 当我在苹果酒(Emacs)中的各种参数上测试它时,它运行良好,但4clojure拒绝使用此解决方案,给出以下例外: java.lang.RuntimeException: Unabl

我在学校里遇到了很多问题。这就需要你生成前n个斐波那契数。我想用惰性序列和匿名函数解决它,这是我的解决方案:

#(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)))

我怀疑您在REPL会话中有一个
fib-seq
var
。这在新的REPL中不起作用。
let
中的绑定不能指向其左侧。也就是说,用Scheme的说法,Clojure的
let
不是
letrec
。您可以使用
letfn
来实现这一点。

4clojure中使用的clojure.jar版本在1.5之前,因为4clojure中不支持reduced函数(clojure.1.5支持)。谢谢