【问题标题】:Is there a more lispy way to write this code?有没有更简洁的方式来编写这段代码?
【发布时间】:2010-12-20 03:40:09
【问题描述】:

我一直在学习 Clojure,由于我来自 Ruby,并且在获得 Java 背景之前,我在程序上思考问题。

有没有更'lispy'的方式来编写这段代码,或者这样可以吗?

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

【问题讨论】:

    标签: functional-programming coding-style clojure


    【解决方案1】:

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

    (max 2 (min 6 x))
    

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

    【讨论】:

    • @Dan:Ehrm,不,它没有。如果x 小于2,则(min 6 x)x,而(max 2 (min 6 x))2。所以这几乎不是一回事。
    • @seppk2k:盖克,你是对的。我要删除那条评论。对不起。
    • 啊,好的。我将不得不深入研究内置插件以查看可用的内容。感谢您的指点。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多