LISP公理——七个原始操作符
# LISP公理——七個原始操作符
我們先定義表達式。表達式或是一個原子(atom),它是一個字母序列(如 foo),或是一個由零個或多個表達式組成的表(list),表達式之間用空格分開,放入一對括號中。
以下是一些表達式:
最后一個表達式是由四個元素組成的表,第三個元素本身是由一個元素組成的表。
在算術中表達式 1 + 1 得出值正確的Lisp表達式也有值。
如果表達式e得出值v,我們說e返回v。
下一步我們將定義幾種表達式以及它們的返回值。
如果一個表達式是表,我們稱第一個元素為操作符,其余的元素為自變量。
接下來將定義七個原始(從公理的意義上說)操作符:
quote、atom、eq、car、cdr、cons和cond。
1.(quote x)
返回x。為了可讀性我們把(quote x)簡記 為’x。
$ (quote a) a $ 'a a $ (quote (a b c)) (a b c)2.(atom x)
返回原子t。如果x的值是一個原子或是空表,否則返回()。
在Lisp中,我們按慣例用原子t表示真,而用空表表示假。
既然有了一個自變量需要求值的操作符,我們可以看一下quote的作用。
通過引用(quote)一個表,我們避免它被求值。
一個未被引用的表作為自變量傳給像atom這樣的操作符將被視為代碼:
反之一個被引用的表僅被視為表,在此例中就是有兩個元素的表:
$ (atom '(atom 'a)) ()這與我們在英語中使用引號的方式一致。
Cambridge(劍橋)是一個位于麻薩諸塞州有90000人口的城鎮(zhèn),而“Cambridge”是一個由9個字母組成的單詞。
引用看上去可能有點奇怪,因為極少有其它語言有類似的概念。它和Lisp最與眾不同的特征緊密聯系:代碼和數據由相同的數據結構構成,而我們用quote操作符來區(qū)分它們。
3.(eq x y)
返回t如果x和y的值是同一個原子或都是空表,否則返回()。
$ (eq 'a 'a) t $ (eq 'a 'b) () $ (eq '() '()) t4.(car x)
期望x的值是一個表并且返回x的第一個元素。
$ (car '(a b c)) a5.(cdr x)
期望x的值是一個表并且返回x的第一個元素之后的所有元素。
$ (cdr '(a b c)) (b c)6.(cons x y)
期望y的值是一個表并且返回一個新表,它的第一個元素是x的值,后面跟著y的值的各個元素。
$ (cons 'a '(b c)) (a b c) $ (cons 'a (cons 'b (cons 'c '()))) (a b c) $ (car (cons 'a '(b c))) a $ (cdr (cons 'a '(b c))) (b c)7.(cond (…) …(…))
它 的求值規(guī)則如下:
p表達式依次求值直到有一個返回t。
如果能找到這樣的p表達式,相應的e表達式的值作為整個cond表達式的返回值。
$ (cond ((eq 'a 'b) 'first)((atom 'a) 'second)) second當表達式以七個原始操作符中的五個開頭時,它的自變量總是要求值的。
我們稱這樣的操作符為函數。
總結
以上是生活随笔為你收集整理的LISP公理——七个原始操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博世XDK110开发套件介绍
- 下一篇: Aplication theme 丢失问