1.1 LISP列表
1.1.1 LISP 原子
在一个列表中,原子是由空格分隔的。原子可以紧接着括号。
原子和列表的书面表示被称为符号表达式,或叫S-表达式。
双引号的文本,不论是句子还是段落,都是一个原子。
'(this list includes "text between quotation marks.")
1.1.2 列表中的空格
列表中空格的数量无关紧要。下面的两种写法一致。
'(this list
looks like this)
-------------------------------------------------------------------------
'(this list looks like this)
1.2 运行一个程序
LISP中的列表,都是一个准备运行的程序。
运行它,计算机完成三件事情:
- 只返回列表本身
- 告诉你一个出错消息
- 将列表中第一个符号当做一个命令,然后执行这个命令
单引号“’”,叫作一个引用(quote),当单引号位于一个列表之前时,
它告诉LISP不要对这个列表做任何操作,而是按其原样。
如果在列表前没有这样一个单引号,那么列表里的第一个原子就是操作符了,
在LISP里,这个命令叫做函数。比如(+ 2 2),就是后续两个数字相加。
运行:
在Emacs里,把光标移到这个列表的右括号后面,按下C-x C-e
结果会显示在Emacs的最下面的小BUFFER里,
如果按下C-j 其结果会直接输出在该列表的下一行。
1.6 求值
求值的时候是从内面的列表,向外求值。
比如:
(+ 2 (+ 3 3))
8
它会先把内部的列表求值后,再求外面的列表的值。
1.7 变量
一个符号可以同时具有一个函数定义和一个值。这两者是各自独立。
可以把光标移到符号的后面,用C-x C-e进行求值。
比如(+ 2 2),可以在右括号后面求值,那是使用了+的函数定义。
但是如果光标移到+后面求值,会报错,因为+当前没有绑定变量值。
1.8 参量
(+ 2 2)
后面的两个2称为+函数的参量。用来传递给函数的信息。
1.8.1 参量的数据类型
字符串参量:
(concat "abc" "def")
数字参量:
(substring "The quick brown for jumped." 16 19)
1.8.2 作为变量和列表的值的参量、
(+ 2 fill-column)
(concat "The " (+ 2 fill-column) " red foxes")
1.8.3 参量的个数
(+)
(*)
可以有多个参量
(message "The value of fill-column is %d." fill-column)
1.9 给一个变量赋值
使用set函数
(set 'flowers '(rose violet daisy buttercup))
使用setq函数
(setq flowers '(rose violet daisy buttercup)
herbivores '(gazelle antelope zebra))
比较:setq是set函数的加强,因为它后面的第一个参量,也就是要赋值的变量不用加单引号。
同时, setq还可以同是批量完成赋值操作。
计数的例子:
(setq counter 0)
(setq counter (+ counter 1))
counter