有没有更多的lispy方式来编写这段代码?

时间:2010-12-20 03:40:09

标签: functional-programming coding-style clojure

我一直在学习Clojure,因为我来自Ruby,而且在Java背景之前,我在程序上难以思考。

是否有更“'lispy'的方法来编写此代码,或者这样可以吗?

(defn foo
  ([s t]
     (let [x (+ 4 (- t s))]
       (if (> 2 (if (> 6 x)
                  x
                  6)
              x)
         x
         2))))

1 个答案:

答案 0 :(得分:15)

在clojure中,与任何其他语言一样,通常最好在适用的时候使用内置函数。因此,由于clojure具有minmax功能,因此您可以将if替换为:

(max 2 (min 6 x))

如果clojure的标准库中不存在这些函数,我建议定义它们,因为将minmax的逻辑放入它们自己的函数会产生比使用它们更好的代码foo函数。