第 10 章 其他的宏陷阱.pdfVIP

  • 6
  • 0
  • 约 9页
  • 2017-07-24 发布于江苏
  • 举报
第 10 章 其他的宏陷阱 第 10 章 其他的宏陷阱 编写宏需要格外⼩⼼。函数被隔离在它⾃⼰的词法世界中,但是宏就另当 论了,因 为它要被展开成进调⽤⽅的代码,所以除⾮仔细编写,否则它将会给⽤户带来意料之 外的不便。第 9 章详细说明了变量捕捉,它是这些不速之客中最常见的⼀个。本章将 讨论在编写宏时需要避免的另外四个问题。 10.1 求值的次数 [⽰例代码 10.1] 控制参数求值 正确的版本: (defmacro for ((var start stop) body body) (let ((gstop (gensym))) (do ((,var ,start (1+ ,var)) (,gstop ,stop)) (( ,var ,gstop)) ,@body))) 导致多重求值: (defmacro for ((var start stop) body body) (do ((,var ,start (1+ ,var))) (( ,var ,stop)) ,@body)) 错误的求值顺序: (defmacro for ((var start stop) body body) (let ((gstop (gensym)))

文档评论(0)

1亿VIP精品文档

相关文档