是否有一个 Clojure 函数可以为任何函数做 macroexpand-all
为宏做的事情?
在 SICP 中,Abelson 和 Sussman 对此进行了演示,他们称之为“linear recursive process ”。
换句话说,如果我们给出:
(factorial 6)
该函数将打印(而不是求值):
(* 6 (* 5 (* 4 (* 3 (* 2 (1))))))
本质上,我试图在评估之前“查看”任何函数“构建”的数据结构。
我认为这对于初学者(我自己)来说是一种有趣的方式,可以在将内容传递给 Evaluator* 之前查看 Reader* 正在构建的内容。
*不确定我在这里使用的术语是否正确。
最佳答案
无需编程即可完成功能跟踪。例如,它在 Emacs 的 Cider 扩展中可用。 https://docs.cider.mx/cider/debugging/tracing.html
我已将阶乘程序加载到 Emacs 中,并将光标放在 factorial
函数上。
(ns factorial.core
(:gen-class))
(defn factorial [n]
(if (zero? n)
1
(* n (factorial (dec n)))))
(defn -main
"A factorial program."
[& args]
(let [n 6]
(println "The factorial of " n "is" (factorial n))))
M-x cider-jack-in
REPL: (in-ns 'factorial.core)
C-c M-t v, select factorial when prompted
(factorial 3)
关于clojure - 打印 “fully expanded form before evaluation” 的 Clojure 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70911639/