CL宏的小感悟

来源:互联网 发布:电信光猫iptv端口连接 编辑:程序博客网 时间:2024/06/07 15:03

虽然书上和实践中告诉我了宏的原理..但很长一段时间压根就没有理解..一直觉得自己理解了..但今天彻底实验一番之后最终了解了一点点宏..


理解宏..就一定要理解宏求值的两个步骤..先预处理..后求值..宏的body本身就是为了预处理而存在的..在预处理阶段进行求值(这种求值完全和普通CL求值一致)..第二步求值的对象是第一步预处理的结果..


看清楚了..第二步(也就是我们普通CL的求值过程)处理的对象是第一步预处理的结果..所以并不是什么宏必须有反引号内容什么的..不是..

(defmacro test () (if t then else)) 也是一个正确的宏..预处理(test)的结果是then..然后第二步继续对then继续求值..就是then的值了..


所以其实宏就是操作生成供正常读取器读取..求值器求值的普通CL代码..这个代码是哪里来的呢?就是第一步预处理的结果..所以同志们..一定要想好宏的求值顺序..来安排自己的操作情况..


我们之所以经常在宏中使用反引号..是因为反引号本身的返回结果就是自身..这为我们生成代码提供了便利..我们可以直接在反引号中写我们预处理之后的代码..这样简化了我们的生成工作..


继续思考中..

原创粉丝点击