如果在 Clojure 中总是返回 nil

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)

noi*_*ith 5

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

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