Un grand merci pour toutes les belles réponses! Ne peut pas marquer un seul comme correct
Remarque: Déjà un wiki
Je suis nouveau à la programmation fonctionnelle et bien que je puisse lire les simples fonctions en programmation Fonctionnelle, par exemple, pour le calcul de la factorielle d'un nombre, je trouve qu'il est difficile de lire les grandes fonctions. Partie de la raison est je pense à cause de mon incapacité à comprendre les petits blocs de code à l'intérieur d'une définition de fonction, et aussi en partie parce qu'il est de plus en plus difficile pour moi de match () dans le code.
Il serait génial si quelqu'un pouvait me guider à travers la lecture du code et de me donner quelques conseils sur la façon de rapidement déchiffrer une partie du code.
Note: je peux comprendre ce code si je regarde pendant 10 minutes, mais je doute que ce même code a été écrit en Java, il me faudrait 10 minutes. Donc, je pense que pour se sentir à l'aise dans Lisp style code, je dois le faire plus vite
Note: je sais que c'est une question subjective. Et je ne suis pas à la recherche d'un quelconque prouvable bonne réponse ici. Juste des commentaires sur la façon dont vous aller à ce sujet la lecture de ce code, serait la bienvenue, et très utile
(defn concat
([] (lazy-seq nil))
([x] (lazy-seq x))
([x y]
(lazy-seq
(let [s (seq x)]
(if s
(if (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s) y))
(cons (first s) (concat (rest s) y)))
y))))
([x y & zs]
(let [cat (fn cat [xys zs]
(lazy-seq
(let [xys (seq xys)]
(if xys
(if (chunked-seq? xys)
(chunk-cons (chunk-first xys)
(cat (chunk-rest xys) zs))
(cons (first xys) (cat (rest xys) zs)))
(when zs
(cat (first zs) (next zs)))))))]
(cat (concat x y) zs))))