首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解递归函数的返回

理解递归函数的返回
EN

Stack Overflow用户
提问于 2018-12-12 10:48:35
回答 1查看 65关注 0票数 0

我是Clojure的新手,我试图理解为什么下面这两个函数是不同的。

First

代码语言:javascript
复制
(defn rp [i]
  ((println i)
   (if (> i 3)
     (println "bye")
     (rp (inc i)))))

第二

代码语言:javascript
复制
(defn rp
  ([i] (println i)
       (if (> i 3)
         (println "bye")
         (rp (inc i)))))

当我用(rp 0)调用它们时,第一次打印

代码语言:javascript
复制
0
1
2
3
4
bye
CompilerException java.lang.NullPointerException, compiling:(/Users/...) 

第二次打印

代码语言:javascript
复制
0
1
2
3
4
bye
=> nil

他们为什么不一样?为什么第一个函数触发NullPointerException

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-12 13:52:32

您的第一个示例在身体周围有父类,并将(println i) (即nil)的结果作为函数调用。例如,((println :a) :b)抛出。很可能与你在第二个例子中与不同性质的实验有关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53741332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档