Recursion 4 Clojure与本地Clojure不一致
我在学校里遇到了很多问题。这就需要你生成前n个斐波那契数。我想用惰性序列和匿名函数解决它,这是我的解决方案: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
#(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支持)。谢谢