Lisp 入門/第四章 原子和值
< Lisp 入門
第四章 原子和值
编辑再講原子
编辑這次,我們願意詳細講解原子
原子可以是任何數,分數,小數,自然數,負數等等。
原子可以是一個字母排列,當然其中可以夾雜數字和符號。
空表就是原子NIL。
在 LISP 解释器中输入引用符(单引号)紧接着输入一个原子,可以返回这个原子本身,就像对列表的操作一样。比如:
'sdf
会返回 SDF。
SDF 是一个普通的原子。像
- sd2f
- SDF+
- SDF*
- SDF.
都是普通的原子。
但原子中还是不能包含一些特殊字符的,比如逗号:sdf, 。这个会返回错误 Error: A comma has appered out of a backquote. 含義是,逗號出現在了單引號之外。
ATOM運算符
编辑判斷一個字符序列是不是原子,或者甚至一個元素是不是原子,我們用ATOM運算符。
(atom 'a)
(atom '(3))
上面的第一个表达式返回 T,因为 a 是一个原子。而第二个表达式则返回 NIL,因为 (3) 是一个列表。 换言之, ATOM運算符在參數為原子時返回真,在參數為一個表時或參數構不成原子時返回假。
SETQ運算符
编辑首先來看一下
>1
1
>a
Error: The variable A is unbound
很好,我們說過,解譯器的功能就是對一個輸入的表達式求值而已。1的值自然是1,然而a的值呢,錯誤說變量A的值還未經綁定。綁定的意思就是類c語言中的賦值。
如何綁定一個變量呢,如下
>(setq a 5)
5
然後,我們再次輸入a,情形就不同了。
>a
5
不過,你肯定對輸入(setq a 5)之後有一個5出現迷惑不解,setq運算符的意義就是賦值並且將此值返回。就是說,表達式(setq a 5)的值是5 。
我們可以接著
>(setq a 6)
6
>a
6
再然後,我們可以
>(cons a '(3))
(6 3)
現在這樣也是可以的:
>(setq a 'b)
B
>(cons a '(3))
(B 3)
>(setq a '(1 2 3))
(1 2 3)
>(cdr a)
(2 3)