【发布时间】:2015-03-31 23:42:45
【问题描述】:
我编写了一个函数,可以对列表的成员求和。非常简单,新手的东西,但由于某种原因它返回 nil,我不知道为什么:这应该是不费吹灰之力。实现和函数调用如下。
实现:
(defn add-list-members
([x] (add-list-members x 0))
([x total]
(if (= (count x) 2)
(+ (first x) (first (rest x)) total))
(if (= (count x) 1)
(+ (first x) total))
(if (> (count x) 2)
(recur (rest (rest x)) (+ (+ (first x) (first (rest x))) total)))))
函数调用:
(println "our total is: " (add-list-members '(2 23 33 14 33 134 9000 98993)))
同时,我有一个添加了打印语句的调试版本,并且我已经能够验证实现是否正常工作。
调试版本:
(defn add-list-members-debug
([x] (add-list-members-debug x 0))
([x total]
(println ">>> our list now: " x)
(println ">>> our total now: " total)
(if (= (count x) 2)
(println "outcome 2 : " (+ (first x) (first (rest x)) total)))
(if (= (count x) 1)
(println "outcome 1 : " (+ (first x) total)))
(if (> (count x) 2)
(recur (rest (rest x)) (+ (+ (first x) (first (rest x))) total)))))
调用调试版本:
(add-list-members-debug '(2 23 33 14 33 134 9000 98993))
我使用的开发工具是插入 Leiningen REPL 的 Vim。任何关于我在这里做错的提示将不胜感激。
【问题讨论】:
-
您的意思是“null”而不是“nil”吗?
-
问题版本的输出是:"our total is: nil"
-
不,
nil是 Clojure 在没有其他内容可返回时经常返回的内容。 -
另一个在 Clojure 中使用 vim 的人!现在我知道我们至少有两个人。 :-)
标签: clojure functional-programming