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)