微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

功能Clojure还是强制Groovy更易读?

好的,现在没有作弊。

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

“职位”是做什么的?

编辑:根据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] vs.(list),连字符名称)
>词汇(减少是什么意思?你/你可以在哪里查找?)
>评估规则(将功能作为对象进行处理)大多数语言都是错误的。)
>成语,如(地图首先(一些减少额外的累积值))

所有这些都需要时间和实践和重复学习和内化。但是如果你花了6个月的时间来阅读和撰写大量的Clojure,那么你不仅可以从现在开始6个月就能了解Clojure代码,还可以比现在更了解它,甚至可以简化它。这个怎么样:

(use 'clojure.contrib.seq-utils)                                        ;;'
(defn positions [coll]
  (mapcat #(repeat (count %) (inc (ffirst %)))
          (partition-by second (indexed coll))))

看一下我一年前写的Clojure代码,我很害怕它是多么糟糕,但我可以看清楚。 (不要说你的Clojure代码是可怕的,我根本看不懂,我没有上师)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐