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

Jos*_*ehl 7 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))))
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 15

在clojure中,与任何其他语言一样,通常最好在适用的时候使用内置函数.因为clojure有一个min和一个max函数,所以你可以用以下代码替换你if的:

(max 2 (min 6 x))
Run Code Online (Sandbox Code Playgroud)

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