OK, no hay trampas ahora.¿Es funcional Clojure o imperativo Groovy más legible?
No, realmente, tómese un minuto o dos y pruebe esto.
¿Qué significa "posiciones"?
Editar: simplificado según la sugerencia de 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)))))
Ahora, ¿qué tal esta versión?
def positions(coll) {
def (current, next) = [1, 1]
def previous = coll[0]
coll.collect {
current = (it == previous) ? current : next
next++
previous = it
current
}
}
estoy aprendiendo Clojure y yo soy amante de ella, porque siempre he disfrutado de la programación funcional. Me llevó más tiempo encontrar la solución Clojure, pero disfruté al tener que pensar en de una solución elegante. La solución Groovy está bien, pero estoy en el punto donde encuentro este tipo de programación imperativa aburrida y mecánica. Después de 12 años de Java, me siento atrapado y la programación funcional con Clojure es el impulso que necesitaba.
Derecho, ir al grano. Bueno, tengo que ser honesto y decir que me pregunto si entenderé el código de Clojure cuando regrese a él meses después. Claro que podría comentar todo lo diablos, pero no necesito comentar mi código Java para entenderlo.
Así que mi pregunta es: ¿se trata de acostumbrarse a los patrones de programación funcional? ¿Los gurús de la programación funcional están leyendo este código y consideran que es muy fácil de entender? ¿Qué versión hizo usted más fácil de entender?
Editar: lo que este código hace es calcular las posiciones de los jugadores de acuerdo a sus puntos, al mismo tiempo hacer un seguimiento de los que están atados. Por ejemplo:
Pos Points
1. 36
1. 36
1. 36
4. 34
5. 32
5. 32
5. 32
8. 30
Excelente respuesta. Me encanta tu versión. Debo admitir que me tomó un tiempo conseguirlo. ¡Es bastante inteligente! Gracias. – foxdonut