如果总是在 Clojure 中返回 nil

if always returning nil in Clojure

我正在尝试使用 clojure 编写一个程序来检查数字是否完美。我对 Clojure 或任何其他函数式编程语言都很陌生。

当我删除第 5 行的 if 语句时,它工作正常。但是我需要检查我是否划分了数字。那是我的问题。请检查下面我的函数并告诉我为什么它返回 nil。无论我更改什么,都会返回 nil。

如果有人可以逐行解释每一行在做什么,那也会有所帮助。谢谢

(defn perfect [number]
   (loop [i 1 sum 0]
     (if (< i number)
       (recur (+ i 1)
              (if (= (mod number i) 0)
                (+ sum i)))
                sum)))

if总是有两个分支。如果您只提供一个分支的代码,那么另一个分支只需 returns nil。如果未采用 recur 分支,则需要为 return 的循环提供一些值。

需要明确的是,尽管你的标题是 recur 内部的 if 不是这里的问题,但 recur 外部的 if 是 returning nil。我们在 clojure 中没有语句,if 是一个表达式,就像其他所有内容一样。