OK, non imbrogliare ora.Il Clojure funzionale o imperativo Groovy è più leggibile?
No, davvero, prendi un minuto o due e provalo.
Cosa fanno le "posizioni"?
Modifica: semplificata secondo il suggerimento di 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)))))
Ora, che ne dici di questa versione?
def positions(coll) {
def (current, next) = [1, 1]
def previous = coll[0]
coll.collect {
current = (it == previous) ? current : next
next++
previous = it
current
}
}
sto imparando Clojure e me ne sono innamorato, perché mi è sempre piaciuto programmazione funzionale. Mi ci è voluto più tempo per trovare la soluzione Clojure, ma mi sono divertito a dover pensare a di una soluzione elegante. La soluzione Groovy va bene, ma io sono al punto in cui trovo questo tipo di programmazione imperativa noioso e meccanico. Dopo 12 anni di Java, mi sento in un solco e la programmazione funzionale con Clojure è la spinta di cui avevo bisogno.
Giusto, arriva al punto. Bene, devo essere onesto e dire che mi chiedo se capirò il codice Clojure quando tornerò dopo mesi. Certo, potrei commentare il diavolo, ma non ho bisogno di commentare il mio codice Java per capirlo.
Quindi la mia domanda è: si tratta di essere più abituati ai modelli di programmazione funzionale? I guru della programmazione funzionale stanno leggendo questo codice e trovandolo un gioco da ragazzi per capire? Quale versione ha è più facile da capire??
Modifica: ciò che fa questo codice è calcolare le posizioni dei giocatori in base ai loro punti, mentre tiene traccia di coloro che sono legati. Ad esempio:
Pos Points
1. 36
1. 36
1. 36
4. 34
5. 32
5. 32
5. 32
8. 30
Ottima risposta. Adoro la tua versione. Devo ammettere che mi ci è voluto un po 'per averlo. È abbastanza intelligente! Grazie. – foxdonut