gpt4 book ai didi

macros - 在 Clojure 语言中 <'a> 到底是什么

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

实际上我正在尝试完全理解 clojure,特别是符号

(def a 1)
(type a)
;;=>java.lang.Long
(type 'a)
;;=>clojure.lang.Symbol

我知道 type 是一个函数,因此它的参数首先被评估,所以我完全理解为什么上面的代码以这种方式工作。在流动的代码中,我决定使用宏延迟评估

 (defmacro m-type [x] (type x))
(m-type a)
;;==>clojure.lang.Symbol

我对此很满意,但我无法理解的是:

 (m-type 'a)
;;=>clojure.lang.Cons

为什么 'a 的类型是缺点

最佳答案

字符 ' 被 clojure 阅读器解释为阅读器宏,它扩展为包含符号 quote 的列表,后跟 ' 后面的任何内容,因此在调用 (m -type 'a) 'a 扩展为:

user> (macroexpand-1 ''a)
(quote a)

然后调用列表上的类型(quote a),这是一个缺点。

如果我们让 m 类型宏打印它在评估时看到的参数,这可能会更清楚:

user> (defmacro m-type [x] (println "x is " x) (type x))
#'user/m-type
user> (m-type 'a)
x is (quote a)
clojure.lang.Cons

关于macros - 在 Clojure 语言中 <'a> 到底是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21315271/

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