Common Lisp入門筆記(一)7個基本運算子
摘自 《Lisp語言- 陳光喜》
表示式例項:
>(+ 1 2)
>3
Common Lisp表示式求值規則是:
首先對每個引數從左到右進行求值;
其次將這些已經求值的引數作為運算子函式的引數進行函式呼叫求值;
所求得的值作為表示式的值返回。
一、Lisp的資料型別
Lisp有其它語言的一切型別,還提供另外其它語言沒有兩種型別: symbol(符號)和 list(表)。
(1)符號顯示時總是被轉換為大寫。一般要使用 quote 來引用它
>’qwert
QWERT
(2)列表
List(表)是由一對括號包括起來的,括號內有 0 個或多個元素,這些元素可以是任何型別的,也可以是表。要使用 quote 來引用 list,否則它將被 Lisp 求值。
> '(1 2 (a b 3) d)
(1 2 (a b 3) d)
也可以使用 list 來建立表:
> (list 'a 'b "sin" 1 2)
(A B "sin" 1 2)
>(list '(* 2 3) (* 2 3))
((* 2 3) 6)
二、Lisp的7個基本運算子
Lisp的表示式是一個原子(atom)或表(list),原子是一個字母序列,如ab;表是由零個或多個表示式組成的序列,表示式之間用空格分隔開,放入一對括號中。
(1) quote
quote是一個特殊的運算子,可以簡寫為" ‘ “ ,它的求值規則是什麼也不做。通過引用一個表,可以避免它被求值。
> (quote x)
X
> (quote (a b c))
(A B C)
> 'x
X
> '(a b c)
(A B C)
(2) atom
(atom x)返回原子t (或T),如果x的值是一個原子或是空表,否則返回 ()。在Lisp中,() 即空表可表示為()或nil。
>(atom ())
>T
(3)eq
(eq x y) 如果x 和 y 的值是同一個原子或都是空表返回 T , 否則返回空表 () 。
>(eq 'a 'a)
>T
>(eq '(a b) '(a b))
>NIL
注意(eq '(a b) '(a b)) 會返回NIL , 因為 '(a b) 不是原子
(4)car 和 cdr
(car x)要求引數 x 的值是一個表,它返回 x 的第一個元素。
(cdr x) 要求引數 x 的值是一個表,返回 x 的第一個元素之後的所有元素。
> (cdr '(a b c))
(b c)
>(car (cdr ‘(a b c)))
b
(5)cons
(cons x y)要求 y 是一個表,它返回一個表,表的第一個元素是 x,其後是 y 中的所有元素。例如:
> (cons '1 '(2 3))
(1 2 3)
> (cons '(a b) '(1 2 3))
((A B) 1 2 3)
(6)cond
在 Lisp 中分支條件可由 cond 操作符完成的。Cond 的形式如下:
(cond (p1 e1) (p2 e2)...(pn en))
p1 到 pn 為條件,e1 到 en 為結果,cond 操作符依次對 p1 到 pn 求值,直到找到第一個值為原子 t(真)的p,此時把對應的表示式 e 的值作為整個表示式的值返回。
如:
>(cond ((eq 'a 'b) 'first) ((eq '1 '1) 'second))
>SECOND
相關文章
- 【Linux入門】Shell基本運算子的分類有哪些?Linux
- 運算子過載筆記筆記
- Django 筆記 - 特殊運算子Django筆記
- lisp入門Lisp
- PHP入門之型別與運算子(一)PHP型別
- Common LISP Hints 中文Lisp
- Common lisp HyperSpec lisp 語法幫助Lisp
- Java學習筆記--運算子Java筆記
- Django 筆記 - 特殊運算子 2Django筆記
- Java入門系列-06-運算子Java
- c#入門-關係運算子C#
- Swift--基本運算子Swift
- 自學PHP筆記(五) PHP運算子PHP筆記
- MySQL筆記 —SQL運算子打椰MySql筆記
- swift 基礎筆記二(運算子)Swift筆記
- 《實用Common Lisp程式設計》書評、讀書筆記有獎徵集Lisp程式設計筆記
- JS基礎入門篇(七)—運算子JS
- 入門篇-其之七-Java運算子Java
- 2012一週一語言:Common LispLisp
- java基本語法--運算子Java
- shell指令碼——基本運算子指令碼
- 小議 Common Lisp 的名字Lisp
- Flutter學習筆記(5)--Dart運算子Flutter筆記Dart
- swift高階運算子-讀書筆記Swift筆記
- 課堂筆記 - C++ 位運算子筆記C++
- 《實用Common Lisp程式設計》讀書小記Lisp程式設計
- java基礎一:基本型別,運算子號Java型別
- TypeScript 入門自學筆記(一)TypeScript筆記
- javascript快速入門10--運算子,語句JavaScript
- C語言學習筆記--C運算子C語言筆記
- Rxjs TakeUntil 運算子的學習筆記JS筆記
- 表的聯結、運算子學習筆記筆記
- Swift 語言的基本運算子Swift
- 前端入門9-JavaScript語法之運算子前端JavaScript
- Python入門(五):Python常用操作運算子Python
- Python 入門到精通(5):Python運算子Python
- Electron小白入門自學筆記(一)筆記
- JavaScript入門-學習筆記(一)JavaScript筆記