4clojure与本地Clojure不一致

时间:2014-04-03 13:29:39

标签: recursion clojure fibonacci

我在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)))

2 个答案:

答案 0 :(得分:3)

我怀疑您的REPL会话中有fib-seq var。这不适用于新的REPL。 let中的绑定不能指向其左侧。也就是说,在方案中,Clojure的let不是letrec。您可以使用letfn代替。

答案 1 :(得分:0)

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