Есть ли способ показать пошагово, как Clojure оценивает функцию? - PullRequest
9 голосов
/ 04 августа 2011

Я только начинаю учить себя Clojure.В качестве дополнения к учебе я посмотрел несколько лекций Брайана Харви в Калифорнийском университете по теме функциональное программирование.Во второй второй лекции по функциональному программированию примерно на 34-й минуте он использует функцию apply для отображения порядка оценки.Есть ли у Clojure функция, похожая на эту?Конечно, было бы удобно увидеть порядок оценки, когда я работаю, чтобы понять, почему и почему.

1 Ответ

8 голосов
/ 04 августа 2011

Вы можете сделать только в REPL (ответ Майка Мейера в списке рассылки Clojure: Отладка в 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

есть также Clojure Debugging Toolkit («Смешно длинные инструкции о том, как использовать это здесь: http://georgejahad.com/clojure/emacs-cdt.html ")

А некоторые IDE (например, Eclipse с плагином против часовой стрелки) позволяют отлаживать: устанавливать точки останова, видеть локальные объекты, входить / выходить, ...

...