如果总是在 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
是一个表达式,就像其他所有内容一样。
我正在尝试使用 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
是一个表达式,就像其他所有内容一样。