好的,现在不作弊了。
不,真的,花一两分钟试试这个。
“职位”有什么作用?
编辑:根据 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 解决方案没问题,但我发现这种类型的命令式编程既无聊又机械。在使用 Java 12 年后,我觉得使用 Clojure 进行函数式编程是我需要的推动力。
对了,进入正题。好吧,我不得不说实话,我想知道几个月后我再看 Clojure 代码时是否能理解它。当然我可以评论它,但我不需要评论我的 Java 代码来理解它。
所以我的问题是:这是一个越来越习惯函数式编程模式的问题吗?函数式编程大师是否阅读了这段代码并发现它很容易理解?你觉得哪个版本更容易理解?
编辑:此代码的作用是根据玩家的积分计算玩家的位置,同时跟踪并列的玩家。例如:
Pos Points
1. 36
1. 36
1. 36
4. 34
5. 32
5. 32
5. 32
8. 30