clojure if_clojure require_clojure入门(9)

电脑杂谈  发布时间:2017-04-16 03:04:52  来源:网络整理

编写这个教程的一个意图是使用宏来解决真实的难题.而经常的,当我向没有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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...