Clojure:如何进行基本递归?

时间:2015-07-27 01:06:42

标签: clojure

我试图在trycj.com上的clojure中编写一个简单的递归函数。

(defn sum-to-n [n]
  (if (<= n 0) n
      (+ n (sum-to-n (- n 1)))))

通过键入(sum-to-n 4)来调用该函数会导致引发异常:

  

java.lang.IllegalStateException:试图调用未绑定的fn:#&#39; sandbox16265 / sum-to-n

看起来你甚至无法进行递归函数调用。但是,奇怪的是,即使调用不应该触发递归函数调用的(sum-to-n 0),也会抛出相同的异常。我做错了吗?

3 个答案:

答案 0 :(得分:3)

tryclj.com有一个解释它的链接:

  

此外,如果您定义了太多内容,或者在15分钟后,解释程序会删除您输入的数据。

如果其他内容没有按预期工作,您应该知道它使用Clojail,这是一个沙盒库,对您可以执行的操作施加了很多限制。就像评论者所说的那样,这在Clojure repl或编译程序中运行良好。

您应该查看的其他内容:recur用于尾递归以避免淹没您的筹码,dec / incpos?zero?和{{ 1}}用于更可读的检查。当然,您知道这个特殊功能不需要递归。你可以把它写成:

neg?

答案 1 :(得分:0)

(defn sum-to-n [n]
    (if (= n 1)
        n
        (+ n (sum-to-n (dec n)))))

此代码有效。试试看。

答案 2 :(得分:0)

这是一个尝试clj的问题。我不确切知道是什么。

  

(defn f [] 1)

     

&#39; sandbox8136 / F

     

(F)   java.lang.IllegalStateException:试图调用未绑定的fn:#&#39; sandbox8136 / f