我试图在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)
,也会抛出相同的异常。我做错了吗?
答案 0 :(得分:3)
tryclj.com有一个解释它的链接:
此外,如果您定义了太多内容,或者在15分钟后,解释程序会删除您输入的数据。
如果其他内容没有按预期工作,您应该知道它使用Clojail,这是一个沙盒库,对您可以执行的操作施加了很多限制。就像评论者所说的那样,这在Clojure repl或编译程序中运行良好。
您应该查看的其他内容:recur
用于尾递归以避免淹没您的筹码,dec
/ inc
,pos?
,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