2011-08-04 9 views
9

Estoy empezando a enseñarme Clojure. Como parte de mis estudios complementarios, he visto algunas conferencias de UC Berkley de Brian Harvey sobre el tema de la programación funcional. En su second lecture on functional programming, aproximadamente en el minuto 34, usa la aplicación para mostrar el orden de evaluación. ¿Tiene Clojure una función similar a esta? Seguramente sería útil ver el orden de la evaluación mientras trabajo para entender los por qué y dónde.¿Hay alguna manera de mostrar paso a paso cómo evalúa Clojure una función?

Respuesta

8

Puede hacer precisamente en REPL (respuesta de Mike Meyer en Clojure lista de correo: Debugging in Clojure)

=> (use 'clojure.contrib.trace) 
nil 
=> (defn foo [coll] (reduce + coll)) 
#'web-db.core/foo 
=> (defn bar [coll] (map inc coll)) 
#'web-db.core/bar 
=> (dotrace [foo bar] (foo (bar [1 1 1]))) 
TRACE t3868: (bar [1 1 1]) 
TRACE t3868: => (2 2 2) 
TRACE t3869: (foo (2 2 2)) 
TRACE t3869: => 6 
6 

hay también Clojure Depuración Toolkit ("instrucciones ridículamente mucho sobre cómo usarlo aquí: http://georgejahad.com/clojure/emacs-cdt.html ")

Y algunos IDE (como Eclipse con el plugin antihorario) permiten depurar: establecer puntos de interrupción, ver gente, paso de entrada/salida, ...

+0

el problema con la biblioteca de traza es t que no es compatible con los operadores integrados, como '+' ... Lo recuerdo, era un trazador más avanzado, pero no recordaba su nombre –

Cuestiones relacionadas