Common Lisp 笔记(1)
2016-03-23 19:36
253 查看
Common lisp 执行过程
在大多数编程语言中,语言的处理器,无论是解释器还是编译器的操作方式都类似于黑箱。在黑箱内部,语言的处理器各个子系统各自负责一部分文本转换成具体的行为或目标代码。例如:一个词法分析器将字符流分拆成语元并送进解释器,解释器再构建表达式树形结构,称为抽象语法树,随后被送进一个求值器,求值器要么直接解释,要么编译成其他语言,例如机器码。
在Common Lisp中,执行过程分为两个部分,一个将文本转化成Lisp对象,称为读取器,而另一个则用这些对象来实现语言的语义,成为求值器。
读取器定义了字符串如何被转换成我们称为 S-表达式 的Lisp对象。S-表达式可以表达任意树形表达式。
由于语言的语意是对象树而不是字符串定义而成的,因此很容易使用语言本身而非文本形式来生成代码,这也意味着Lisp可以通过处理现有的数据来生成代码,通俗点讲就是Lisp是可以生成语言的语言!这就是Lisp宏的本意。
S-表达式
S-表达式的基本元素是列表(list )和(atom)。列表由括号包围,原子就是其中的内容,原子中间由任意空格分隔。
原子不同的表达形式也许表达的是同一个对象,例如 1/4 和 2/8 表达的对象并没有什么不同,因为Lisp的读取器会把他们表达成相同的对象。但 1.0 和 1 则有可能代表不同的对象。
字符串对象由双引号包围,反斜杠表示转义。Lisp读取器总是将未转义的字母转换成大写形式。例如 foo 和 Foo 都被读成 FOO 。但 \f\0\0 却是 foo 。
在大多数编程语言中,语言的处理器,无论是解释器还是编译器的操作方式都类似于黑箱。在黑箱内部,语言的处理器各个子系统各自负责一部分文本转换成具体的行为或目标代码。例如:一个词法分析器将字符流分拆成语元并送进解释器,解释器再构建表达式树形结构,称为抽象语法树,随后被送进一个求值器,求值器要么直接解释,要么编译成其他语言,例如机器码。
在Common Lisp中,执行过程分为两个部分,一个将文本转化成Lisp对象,称为读取器,而另一个则用这些对象来实现语言的语义,成为求值器。
读取器定义了字符串如何被转换成我们称为 S-表达式 的Lisp对象。S-表达式可以表达任意树形表达式。
由于语言的语意是对象树而不是字符串定义而成的,因此很容易使用语言本身而非文本形式来生成代码,这也意味着Lisp可以通过处理现有的数据来生成代码,通俗点讲就是Lisp是可以生成语言的语言!这就是Lisp宏的本意。
S-表达式
S-表达式的基本元素是列表(list )和(atom)。列表由括号包围,原子就是其中的内容,原子中间由任意空格分隔。
原子不同的表达形式也许表达的是同一个对象,例如 1/4 和 2/8 表达的对象并没有什么不同,因为Lisp的读取器会把他们表达成相同的对象。但 1.0 和 1 则有可能代表不同的对象。
字符串对象由双引号包围,反斜杠表示转义。Lisp读取器总是将未转义的字母转换成大写形式。例如 foo 和 Foo 都被读成 FOO 。但 \f\0\0 却是 foo 。
相关文章推荐
- 编程界主流脚本编程语言的比较和选择
- 什么是Perl?编程语言Perl详细介绍
- 编程语言里的静态、动态、强类型、弱类型等概念介绍
- 编程趣事:当下流行编程语言的”讨厌”程度排行榜
- 一张图告诉你计算机编程语言的发展历史
- 程序员必看2008编程语言走势解盘
- 24种编程语言的Hello World程序
- 256种编程语言大汇总
- 编程语言JavaScript简介
- 用Python编写一个简单的Lisp解释器的教程
- 学编程选什么语言好?是PHP、Python还是Ruby?
- 编程语言Python的发展史
- Python编程语言的35个与众不同之处(语言特征和使用技巧)
- Windows下Lisp环境配置
- 生活在REPL中,工具与程序一体
- 我以为的函数式编程
- Python 与 Javascript 之比较
- 不要和一种编程语言厮守终生:为工作正确选择
- 2015年值得学习的15种编程语言
- Go 语言:Google 的新编程语言