日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LISP公理——七个原始操作符

發布時間:2024/3/26 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LISP公理——七个原始操作符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# LISP公理——七個原始操作符

  我們先定義表達式。表達式或是一個原子(atom),它是一個字母序列(如 foo),或是一個由零個或多個表達式組成的表(list),表達式之間用空格分開,放入一對括號中。
以下是一些表達式:

foo () (foo) (foo bar) (a b (c) d)

  最后一個表達式是由四個元素組成的表,第三個元素本身是由一個元素組成的表。

  在算術中表達式 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表示真,而用空表表示假。

$ (atom 'a) t $ (atom '(a b c)) () $ (atom '()) t

  既然有了一個自變量需要求值的操作符,我們可以看一下quote的作用。
  通過引用(quote)一個表,我們避免它被求值。
  一個未被引用的表作為自變量傳給像atom這樣的操作符將被視為代碼:

$ (atom (atom 'a)) t

  反之一個被引用的表僅被視為表,在此例中就是有兩個元素的表:

$ (atom '(atom 'a)) ()

  這與我們在英語中使用引號的方式一致。

  Cambridge(劍橋)是一個位于麻薩諸塞州有90000人口的城鎮,而“Cambridge”是一個由9個字母組成的單詞。

  引用看上去可能有點奇怪,因為極少有其它語言有類似的概念。它和Lisp最與眾不同的特征緊密聯系:代碼和數據由相同的數據結構構成,而我們用quote操作符來區分它們。

3.(eq x y)

  返回t如果x和y的值是同一個原子或都是空表,否則返回()。

$ (eq 'a 'a) t $ (eq 'a 'b) () $ (eq '() '()) t

4.(car x)

  期望x的值是一個表并且返回x的第一個元素。

$ (car '(a b c)) a

5.(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 (…) …(…))

  它 的求值規則如下:

  p表達式依次求值直到有一個返回t。

  如果能找到這樣的p表達式,相應的e表達式的值作為整個cond表達式的返回值。

$ (cond ((eq 'a 'b) 'first)((atom 'a) 'second)) second

  當表達式以七個原始操作符中的五個開頭時,它的自變量總是要求值的。

  我們稱這樣的操作符為函數。

總結

以上是生活随笔為你收集整理的LISP公理——七个原始操作符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。