我正在尝试进行比较以找到列表中最大的数字。我知道我可以只使用(max 1 2 4 3),但是我正在尝试自己编写函数。但是,我不太确定错误在哪里。每当我运行此命令时,最大值始终为2。我在某个地方做比较错误还是忘记了什么?
(defn maxVal [list]
(def maxValue 0)
(doseq [x list]
(println x maxValue)
(if > x maxValue)
(do (println x ">" maxValue)
(def maxValue x)))
(var-get #'maxValue))
(maxVal '(1 4 3 2))
答案 0 :(得分:2)
问题是您的代码将>
评估为值,而不是将其作为函数调用。
(if > x maxValue)
...求值为x
,因为函数>
既不是nil
也不是假,因此当以布尔值求值时是真实的,而x
是在{if1}的位置,就像maxValue
在此if
的“ else”位置一样。因此,当前的缩进(虽然它准确地反映了意图)有点误导; do
应该在if
之外,因为无论之前发生了什么,它都会发生。
想必,您想要的是:
(if (> x maxValue)