gpt4 book ai didi

clojure - 如何解释《Clojure 编程》一书中的 &env 示例

转载 作者:行者123 更新时间:2023-12-02 12:03:56 25 4
gpt4 key购买 nike

书上有一个例子(P252),是关于宏中的&env,我只是不明白如何得到结果{x 1, y 2}

(defmacro spy-env []
(let [ks (keys &env)]
`(prn (zipmap '~ks [~@ks]))))

(let [x 1 y 2]
(spy-env)
(+ x y))
; {x 1, y 2}
;= 3

我在 REPL 中尝试过这样的操作:

user=> (defmacro spy-env [] (let [ks (keys &env)] `(prn ~@(keys &env))))
#'user/spy-env
user=> (let [x 1 y 2] (spy-env))
2 1

已经写好了。

最佳答案

展开宏将是您了解其工作原理的好方法,但不幸的是 macroexpand-1 无法传达 &env 的正确绑定(bind)。这个例子:

 (let [x 1 y 2] (spy-env))

实际上扩展到:

 (let [x 1 y 2] (prn (zipmap '(x y) [x y])))

你明白了吗?在第一个序列中,xy 不被求值,但在第二个序列中,它们被求值。因此它将符号压缩到它们评估的任何内容。在该 let block 中,(zipmap '(x y) [x y]) 的计算结果为 {x 1 y 2}

关于clojure - 如何解释《Clojure 编程》一书中的 &env 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20260516/

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