宏扩展的执行逻辑初探(二)
再来一个例子
看看以下运行的结果是什么呢?
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/