如果比较语句

时间:2018-09-16 00:29:55

标签: clojure

我正在尝试进行比较以找到列表中最大的数字。我知道我可以只使用(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))

1 个答案:

答案 0 :(得分:2)

问题是您的代码将>评估为值,而不是将其作为函数调用。

(if > x maxValue)

...求值为x,因为函数>既不是nil也不是假,因此当以布尔值求值时是真实的,而x是在{if1}的位置,就像maxValue在此if的“ else”位置一样。因此,当前的缩进(虽然它准确地反映了意图)有点误导; do应该在if之外,因为无论之前发生了什么,它都会发生。

想必,您想要的是:

(if (> x maxValue)