【Successful Lisp】语法(2) Form
来源:互联网 发布:怎么变得成熟稳重 知乎 编辑:程序博客网 时间:2024/06/16 08:51
1.4 Form
List 和symbol都是Form。
Form意味着需要求值(tobe evaluated)。
如果form是symbol,那求值是简单的,只需要取得symbol的值。可以认为是symbol是一个变量,该变量的值可以可变的(variable),也可以是常量(constant)。
用defconstant来定义个常量。比如 (defconstant hello "hello")
如果symbol是一个数字,那么该数字认为是自我求值的(self-evaluating),他的值就是他自身。
关键字(keyword)也被认为是自我求值的。
一个symbol可以通过许多不同的途径来得到他的值。Lisp为每一个symbol保存了几个不同的值,其中一个是通常作为变量的值,另外一个是symbol作为函数来求值,还有一些值包括symbol的文档,symbol的属性等等,我们会在之后,来慢慢介绍。
如果form是一个list,那么list的第一个元素应该是一个symbol或者一个特殊的称为lambda的form(我们会在稍晚些章节介绍lambda)。这个symbol必须是一个function。
我们这里先以简单的算数运算来做说明,更复杂的内容在我们介绍过function之后,再做进一步的介绍。
Lisp中,+,—,*,/这四个symbol分别表示加减乘除。比如:
>(+ 4 5)
9
>(* 4 9)
36
当lisp对(+45)这样的list进行求值的时候,就会按照symbol表示的运算来求值。更进一步来说,当lisp中对一个list来求值的时候,会对第一个symbol作为一个函数调用,其他的symbol作为参数。
比如:
>(atom 1)
T
>(numberp123)
T
>(atom :foo)
T
>(numberp:foo)
NIL
其中atom用来判断参数是不是一个atom,numberp用来判断一个参数是不是一个数字。
这里我们还有一个例子:
>(atomtest-google)
NIL
我们之前不是说可以认为atom和symbol是一致的么,这里怎么会nil,这个原因,我们之后的章节会有解释。
注意,lisp对一个函数求值的时候,是从左往右。
函数可以有任意数量的返回值。
当返回值多于一个时,有若干不同的方案来保存,比如之后我们介绍的structure,或者用若干个变量来存储,不过,这些方式在lisp中看上去有些蹩脚,这里我们介绍以lisp的方式来存储多个返回值,采用valuesform:
>(values 1 23 :hi “baby”)
1
2
3
:HI
"baby"
注意(values1 2 3 :hi “baby”)之后,输出的每一行代表values中的一个值,当然,不同的编译器显示的可能不同,但含义是一样的。
- 【Successful Lisp】语法(2) Form
- 【Successful Lisp】语法(1)
- 【Successful Lisp】语法(3) 特殊的form和宏 SETQ和LET
- lisp基本语法——(一)
- lisp 语法与语义
- SUCCESSFUL!
- successful
- Common Lisp笔记(2)
- Lisp 的本质(2)
- 前端基础(3):html语法(2): <form> 标签
- Linq:基本语法form ,select, where(2)
- Common lisp 学习之路(2)
- 初识LISP(1)——基本的结构、语法与数据类型
- Lisp笔记--第四章-语法语义
- Common Lisp语法——函数定义
- Common Lisp语法——变量
- Common Lisp语法——自定义宏
- Successful Software Development (2nd Edition)
- 设计模式学习之--原型模式(Prototype)
- 没什么可写
- Linux0.11内核--汇编和C语言混合编程之参数传递
- install vim on solaris for sparc
- 关于BMP文件的读取
- 【Successful Lisp】语法(2) Form
- IE中PNG格式不透明的解决办法
- 最小化到托盘
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- 我到底怎么了?
- 使用C#进行点对点通讯和文件传输
- java基础问题14
- 关于动态规划 “数塔”问题~
- proc datasets