我在4Clojure遇到了问题。有Problem 26要求您生成第一个 n Fibonacci数字。我想用懒惰的序列和匿名函数来解决它,这是我的解决方案:
#(let [fib-seq (lazy-seq (map +
(cons 0 (cons 0 fib-seq))
(cons 1 fib-seq)))]
(take % fib-seq))
当我在CIDER(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)))
答案 0 :(得分:3)
我怀疑您的REPL会话中有fib-seq
var
。这不适用于新的REPL。 let
中的绑定不能指向其左侧。也就是说,在方案中,Clojure的let
不是letrec
。您可以使用letfn
代替。
答案 1 :(得分:0)
4clojure中使用的clojure.jar的版本在1.5之前,因为4clojure不支持函数减少(在clojure.1.5中支持)