不,真的,花一两分钟,试一试。
“职位”是做什么的?
编辑:根据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
解决方法
同样,我也可以比西班牙语更容易阅读英文,但也不会说这些语言的内在可读性。 (西班牙语实际上可能是简单和一致性方面的两个“更易读”的语言,但我仍然无法阅读)。我现在正在学习日语,有一个困难的时刻,但是日本的本地人说英语是一样的。
如果你花了大部分时间阅读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 举报,一经查实,本站将立刻删除。