gpt4 book ai didi

clojure - 打印 “fully expanded form before evaluation” 的 Clojure 函数?

转载 作者:行者123 更新时间:2023-12-01 23:05:49 25 4
gpt4 key购买 nike

是否有一个 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)

enter image description here

关于clojure - 打印 “fully expanded form before evaluation” 的 Clojure 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70911639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com