0

我正在尝试编写一个程序来检查一个数字是否完美或不使用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)))
4

1 回答 1

5

if总是有两个分支。如果您只为一个分支提供代码,则另一个只返回 nil。您需要为循环提供一些值以在recur未采用分支的情况下返回。

需要明确的是,尽管您的标题是if重复出现的内部不是这里的问题,而是if重复出现的外部返回为零。而且我们在 clojure 中没有语句,if它是一个表达式,就像其他所有内容一样。

于 2016-01-24T04:06:52.350 回答