0 if-statement clojure perfect-numbers
我正在尝试编写一个程序来检查一个数字是否完美或不使用clojure
. 我对Clojure
任何其他函数式编程语言都很陌生。
当我删除第 5 行的 if 语句时,它工作正常。但我需要检查我是否将数字除以。这就是我的问题。请检查下面我的函数并告诉我为什么它返回 nil。无论我改变什么,都会返回零。
如果有人可以一行一行地解释每一行在做什么,那也会有帮助。谢谢
(defn perfect [number]
(loop [i 1 sum 0]
(if (< i number)
(recur (+ i 1)
(if (= (mod number i) 0)
(+ sum i)))
sum)))
Run Code Online (Sandbox Code Playgroud)
if
总是有两个分支。如果你只提供一个分支的代码,另一个就简单地返回 nil。您需要为循环提供一些值,以便在recur
不采用分支的情况下返回。
需要明确的是,尽管您的标题是if
recur的内部不是这里的问题,而是if
recur的外部返回 nil。而且我们在 clojure 中没有语句,它if
是一个表达式,就像其他所有东西一样。