Хорошо, теперь не обманывать.
Нет, действительно, займите минуту или две и попробуйте это.
Что делают "позиции"?
Изменить: упрощено согласно предложению 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, чтобы понять его.
Итак, мой вопрос: это вопрос о том, чтобы больше использовать функциональные шаблоны программирования? Являются ли функциональные программисты гуру, читающим этот код, и нахождение его для понимания? Какую версию you найти легче понять?
Изменить: что этот код делает, вычисляет позиции игроков в соответствии с их точками, а отслеживает тех, кто привязан. Например:
Pos Points
1. 36
1. 36
1. 36
4. 34
5. 32
5. 32
5. 32
8. 30