编写这个教程的一个意图是使用宏来解决真实的难题.而经常的,当我向没有Lisp经验的人解释宏这个概念的时候,我得到的答复往往是,"哦!C++里也有宏".当发生这种事情的时候,我就很难去解释宏的概念了.的确,Lisp中的宏和C++中的宏的确有几分相似,它们都是为了能通过编译器来改进代码的编写...
...所以,假设一下,如果John McCarthy使用了"add"而不是"cons"这个词来将元素添加到list中:我就真的很难解释cons是如何工作的了!
所以,我决定在此文中使用一个新的词汇:SPEL,语义增强逻辑的简称,它更易理解
一些:
它解释了Lisp宏的核心功能,能改变Lisp运行环境的行为
SPEL这个术语可以被用来很高雅的解释很多语言上观念.
这个术语不会导致Lisp中的宏与其它的宏被混为一谈
SPEL这个词重复的可能性非常低.Google搜索"macro 或者 macros 程序 -lisp -scheme"返回大概1150000条结果.而搜索"spel 或者 spels 程序 -lisp -scheme"值返回28400条结果.
所以,我希望,作为一个Lisp程序员,你能接受这个术语.当然了,像这样的新词汇会被接受的可能性非常低.
如果你有一个库或者是一个Lisp实现者,请先放下你手头上的工作,先在你的库里,添加下面这行代码:
(defmacro defspel [& rest] `(defmacro ~@rest))
本人对Lisp的宏还是有些了解的,所以个人无法接受SPEL这个新词汇
且SPEL使得代码不易阅读,就game-action这个SPEL来说,使用了两层,而使用宏只需要一层
附录中是我使用Clojure的惯用法重新改写的代码,且文字翻译成了中文.以及使用了宏而不是SPEL.各位可比较,自行选择
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-41579-9.html
驷马难追