我一直在学习Clojure,因为我来自Ruby,而且在Java背景之前,我在程序上难以思考。
是否有更“'lispy'的方法来编写此代码,或者这样可以吗?
(defn foo
([s t]
(let [x (+ 4 (- t s))]
(if (> 2 (if (> 6 x)
x
6)
x)
x
2))))
答案 0 :(得分:15)
在clojure中,与任何其他语言一样,通常最好在适用的时候使用内置函数。因此,由于clojure具有min
和max
功能,因此您可以将if
替换为:
(max 2 (min 6 x))
如果clojure的标准库中不存在这些函数,我建议定义它们,因为将min
和max
的逻辑放入它们自己的函数会产生比使用它们更好的代码foo
函数。