宏扩展的执行逻辑初探(二)
再来一个例子
看看以下运行的结果是什么呢?
1 |
|
如果是一个函数呢?
1 |
|
宏参数绑定表达式,而不是表达式的值
a_macro进行扩展的的运行结果是
#'user/a_macro
(+ 1 (+ 1 2)) # 注意!不是 (+ 1 3)
而不是(+ 1 3)
。说明扩展宏的时候,宏的参数绑定的是表达式,
x
绑定了表达式(+ 1 2)
,这样宏内部的list函数求值运行的时候,x的值是一个表达式(+ 1 2)
。
a_func则不同,内部调用同样的list函数的时候,入参(+ 1 2)
首先进行了求值。因此x
绑定的是3
。
因此a_func运行结果是
(+ 1 3)
宏扩展的执行逻辑初探(二)
https://threelambda.com/2018/12/09/macro/