Estoy aprendiendo Clojure usando tutoriales y pasando por problemas como 4clojure y 99 lisp problems. Estoy bien resolviendo problemas, pero mi código siempre parece ser un desastre como el ejemplo a continuación.¿Cómo aprender el camino de Clojure por mi cuenta?
Para un lenguaje tan flexible como Clojure, ¿cómo puede un principiante aprender las formas idiomáticas sin tener a otra persona sujetando la mano en el camino?
Un ejemplo de mi desorden:
(defn intersectall [lset]
(when-not (empty? (first lset))
(if (reduce #(and %1 %2) (map #(stars/member* (front lset) %) (rest lset)))
(cons (front lset) (intersectall (cons (rest (first lset)) (rest lset))))
(intersectall (cons (rest (first lset)) (rest lset))))))
En caso de que se esté preguntando, la función intersectall
simplemente devuelve una lista de los elementos comunes en todas las sub-listas de entrada.
Así para:
(def lset '((6 :pears :and)
(3 :peaches :and 6 :peppers)
(8 :pears :and 6 :plums)
(:and 6 :prunes :with some :apples)))
=> (intersectall lset)
(6 :and)
Este problema es de la pequeña Schemer pg 117.
Debe publicar este tipo de preguntas en [Grupo de Clojure de Google] (http://groups.google.com/group/clojure?pli=1). –