gpt4 book ai didi

groovy - 函数式 Clojure 还是命令式 Groovy 更具可读性?

转载 作者:行者123 更新时间:2023-12-03 15:07:39 25 4
gpt4 key购买 nike

好的,现在不作弊了。

不,真的,花一两分钟试试这个。

“职位”有什么作用?

编辑:根据 cgrand 的建议进行简化。

(defn redux [[current next] flag] [(if flag current next) (inc next)])

(defn positions [coll]
(map first (reductions redux [1 2] (map = coll (rest coll)))))

现在,这个版本怎么样?
def positions(coll) {
def (current, next) = [1, 1]
def previous = coll[0]
coll.collect {
current = (it == previous) ? current : next
next++
previous = it
current
}
}

我正在学习 Clojure 并且我很喜欢它,因为我一直很喜欢函数式编程。我花了更长的时间来想出 Clojure 解决方案,但我很高兴能够想到一个优雅的解决方案。 Groovy 解决方案没问题,但我现在发现这种类型的命令式编程既无聊又机械。在使用了 12 年的 Java 之后,我觉得自己陷入了困境,而 Clojure 的函数式编程正是我所需要的。

对了,进入正题。好吧,我必须诚实地说,我想知道当我几个月后回到 Clojure 代码时我是否会理解它。当然我可以注释掉它,但我不需要注释我的 Java 代码来理解它。

所以我的问题是:是不是更习惯于函数式编程模式?函数式编程大师是否在阅读这段代码后发现它很容易理解?你觉得哪个版本更容易理解?

编辑:这段代码的作用是根据玩家的分数计算他们的位置,同时跟踪那些被并列的人。例如:

Pos Points
1. 36
1. 36
1. 36
4. 34
5. 32
5. 32
5. 32
8. 30

最佳答案

我不认为有任何内在可读性之类的东西。有你习惯的,还有你不习惯的。我能够阅读您的代码的两个版本。我实际上可以更轻松地阅读您的 Groovy 版本,即使我不了解 Groovy,因为我也花了十年时间研究 C 和 Java,而只有一年时间研究 Clojure。这并没有说明语言,它只说明了我的一些事情。

同样,我比西类牙语更容易阅读英语,但这也不能说明这些语言的内在可读性。 (从简单性和一致性上讲,西类牙语实际上可能是两者“更具可读性”的语言,但我仍然看不懂)。我现在正在学习日语并且遇到了困难,但是以日语为母语的人对英语也这么说。

如果您一生中的大部分时间都在阅读 Java,那么看起来像 Java 的东西当然比不看的东西更容易阅读。除非您花时间研究 Lispy 语言和研究类 C 语言一样多,否则这可能仍然是正确的。

要理解一种语言,除其他外,您必须熟悉:

  • 语法 ( [vector](list) , hyphens-in-names )
  • 词汇(reductions 是什么意思?如何/在哪里可以查到?)
  • 评估规则(将函数视为对象有效吗?在大多数语言中这是错误的。)
  • 习语,如 (map first (some set of reductions with extra accumulated values))

  • 所有这些都需要时间、练习和重复来学习和内化。但是,如果您在接下来的 6 个月内阅读和编写大量 Clojure,那么您不仅能够在 6 个月后理解 Clojure 代码,而且您可能会比现在更好地理解它,甚至可能能够简化它。这个怎么样:
    (use 'clojure.contrib.seq-utils)                                        ;;'
    (defn positions [coll]
    (mapcat #(repeat (count %) (inc (ffirst %)))
    (partition-by second (indexed coll))))

    看看我一年前写的 Clojure 代码,我对它的糟糕程度感到震惊,但我可以阅读它。 (并不是说你的 Clojure 代码很糟糕;我完全没有读过它,而且我不是大师。)

    关于groovy - 函数式 Clojure 还是命令式 Groovy 更具可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com