LISP宏的几点理解
来源:互联网 发布:网络歌手花姐 编辑:程序博客网 时间:2024/04/28 05:40
阅读了经典文章:http://www.defmacro.org/ramblings/lisp.html之后,这里有几个理解
1. LISP宏的作用
简短说就是将数据转换成代码。
2. 数据和代码的关系
首先LISP中所有的都是list, 当然也可以叫做S表达式,参考我的另一篇文章:S-expression
如果把list中的第一元素视为函数,该list就可视作代码一样运行。术语叫做求值, evaluate。当然也可以不求值,此时list就是数据。因此这里引出一个重要概念 ,代码也是数据,一切皆为数据,一切都是list.
3. 像C的宏一样传递参数
如果一个list传递给lisp函数,则先被求值为atom(一个特殊的list,不能再被求值)后再传递进去
如果一个list传递给lisp宏,则不被求值,而将其完整的传递进去,至于宏里面怎么干,随便宏的实现者怎么玩。像C的宏吧,不过C的宏只是文本替换,还是简单了点。
4. lisp宏返回的是什么
返回的是一个list,而且被视作可以求值的list,也就是代码。
5. 为什么说C的宏简单
C的预处理器所实现的宏只能进行简单的文本替换,至多加上换行符\ 或者连接符#
它不能帮我们生成for循环,也不能处理http下载,我们必须手动写C++代码,然后用文本替换的方式拼起来。如果做一个稍微复杂点的功能简直就是噩梦。而lisp宏除了3和4外,和一个正常的函数没有什么区别。
想象一下,如果C的宏能够像C的函数一样强大是多么方便,这就是lisp宏。
6. 用于元编程和DSL
元编程就是用代码创造新的代码,lisp宏的特性可以用来将传递进来的list和宏的实现代码合在一起,制作出新的代码,因此就支持了元编程。我不是很了解C++的template meta programming技术,但是凭直觉猜测lisp的解决方案更容易理解更强大,显然性能不及C++. 而元编程又可以用来创造DSL,特定领域语言。
这些都是概念,后面我会用newlisp来演示。
- LISP宏的几点理解
- common lisp中宏的理解
- Lisp语言的理解
- LTORG的几点理解
- LTORG的几点理解
- swap的几点理解
- 共振的几点理解
- classpath的几点理解
- VS2005 打包安装的几点理解
- 对String的几点理解
- finalize方法的几点理解
- 关于mfc CSplitterWnd的几点理解
- Servlet需要理解的几点
- Java泛型中通配符的几点理解
- Android 关于Service的几点理解
- 关于UIViewController生命周期的几点理解
- 关于DDS的几点理解
- Java泛型中通配符的几点理解
- PHP 实现判断密码两次是否一致
- 求助 javascript以及css滤镜详细介绍,在IE以及火狐、chrome等主流浏览器下的详细应用教程
- 百度商用了ARM服务器
- 初窥Linux 之 我最常用的20条命令
- arm linux kernel 从入口到start_kernel 的代码分析
- LISP宏的几点理解
- Struts2的拦截器特性实现登录验证
- C#下使用GDAL库 下载和引用方法
- JAVA swing界面JFrame窗体的全局按键事件监听
- MFC 程序启动流程分析
- mysql 连接出错 'mysqladmin flush-hosts'
- 1190. Reduced ID Numbers
- 监督学习和无监督学习
- 从主报表中取得子报表返回的参数值