好的,现在不能作弊。
真的,请花一两分钟尝试一下。
"positions"是做什么用的?
编辑:根据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