OK、今は不正行為はありません。
いいえ、実際には、1、2分かかり、これを試してみてください。
「ポジション」は何をしますか?
編集: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