2011-05-19 8 views
7

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.

+0

Debe publicar este tipo de preguntas en [Grupo de Clojure de Google] (http://groups.google.com/group/clojure?pli=1). –

Respuesta

12

Si realmente quiere OBTENER Clojure, recomiendo encarecidamente The Joy of Clojure reservar. Está escrito por dos de los tipos que conocen mejor el idioma junto al creador original. Explican lo que puedes hacer, cómo debes hacerlo y luego los por qué. No creo que sea un buen libro PRIMERO/experiencia de aprendizaje en el idioma, sin embargo, creo que es el SEGUNDO libro requerido para estudiar una vez que tenga sus fundamentos.

+0

+1 para sugerir que sea su segundo libro. (También agregaría su tercer libro :)) – stand

+0

@stand: si me está pidiendo que agregue mi tercero, ninguno de los libros de clojure actualmente disponibles es uno bueno, aunque estoy ansioso por tener acceso a la programación de Clojure y mira cómo encaja eso con el resto. Personalmente después de JoC iría a la lista de correo y al canal de IRC en freenode. – Runevault

+4

lo siento, no estaba claro. Quería decir que después de leer JoC como su segundo libro, debería leerlo nuevamente como su tercer libro. – stand

1

leído el código. Lea el código bien escrito.

Puede comenzar con la fuente de clojure - obtener aquí: https://github.com/clojure/clojure/tree/master/src/clj/clojure. Por lo general, el código en el estándar-lib de un idioma es/tiene que ser bastante idiomático. Entonces este es un buen lugar para comenzar tu viaje.

+2

¿Realmente vas a decirle a un principiante en la programación que comience con la fuente de Clojure? – JasonFruit

+4

* No * lea clojure.core para obtener inspiración.Los otros paquetes pueden estar bien, pero el núcleo está muy centrado en el rendimiento y está ocupado en el arranque definiendo toda la biblioteca estándar en términos de las primitivas del compilador. – amalloy

+1

Acepto que clojure.core puede ser bastante complicado en algunos lugares, pero personalmente me pareció bastante útil cuando aprendí Clojure. YMMV aquí, creo, sin duda vale la pena buscar a los principiantes que están interesados ​​en cómo funcionan los internos. – mikera

4

Tanto la escritura como el código de lectura son apropiados y necesarios. Si el código fuente de Clojure parece intimidante, comience con proyectos más pequeños, por ejemplo, https://github.com/technomancy/robert-hooke. Ya que ha estado haciendo los problemas de 4Clojure, ¿por qué no mira las soluciones de los demás después de que haya escrito el suyo propio? Busque el hashtag # 4clojure en twitter o simplemente visite https://twitter.com/#!/search/%234clojure.

¡Buena suerte!

+0

Acepto - un aspecto clave de aprendizaje de 4Clojure es revisar las respuestas de los demás. Puede encontrar todos los niveles de calidad de la solución, desde aquellos que son claramente una solución imperativa envuelta con parens a unos que son tan cortos y concisos que se pasa días trabajando cómo se hacen tan elegantemente. – rmp

2

Resuma su código en funciones más pequeñas que hacen una cosa y una cosa bien. Una vez que haya logrado esto, puede tratar de hacerlo más elegante. A veces te das cuenta de que tu resultado final es tan dulce y corto que en realidad terminas encerrándolo.

Enlaza los valores que ya has obtenido usando let. Por ejemplo, llamar (first lset) varias veces en varios lugares diferentes hace que su código sea más detallado.

1

Sugeriría deconstruir un ejemplo complejo. En el Denver Clojure Meetup, hemos deconstruido el Joy of Clojure lista de Quicksort 6.3 línea por línea. Tengo las diapositivas here.

0

Clojurecademy es una plataforma interactiva que enseña Clojure, es muy útil y fácil de aprender Clojure.

Cuestiones relacionadas