LISP


LISP (简体)

LISP

LISP(全名LISt Processor,即列表處理語言),由約翰·麥卡錫1960年左右創造的一種基於λ演算函數式程式語言

LISP有很多種方言,各個實現中的語言不完全一樣。1980年代Guy L. Steele編寫了Common Lisp試圖進行標準化,這個標準被大多數解釋器和編譯器所接受。在Unix/Linux系統中,還有一種和Emacs一起的Emacs Lisp(而Emacs正是用Lisp編寫的)非常流行,並建立了自己的標準。

LISP語言的主要現代版本包括Common LispScheme

目錄

基本介紹

LISP 是第一個函數型程式語言,主要應用在人工智慧(AI)上,包含語多字元擷取函數,供作自然語言的分析之用。

Lisp的表達式是一個原子(atom)或表(list),原子(atom)又包含符號(symbol)與數值(number);表是由零個或多個表達式組成的序列,表達式之間用空格分隔開,放入一對括號中,如:

abc
()
(abc xyz)
(a b (c) d)

最後一個表是由四個元素構成的,其中第三個元素本身也是一個表,這種 list 又稱為嵌套表(nested list)。

正如算數表達式 1+1 有值 2 一樣,Lisp 中的表達式也有值,如果表達式 e 得出值 v,我們說 e 返回 v。如果一個表達式是一個表,那麼我們把表中的第一個元素叫做操作符,其餘的元素叫做自變數。

Lisp 的 7 個公理(基本操作符):

基本操作符1 quote

(quote x) 返回 x,我們簡記為 'x

> (quote a)
a
> 'a
a

基本操作符2 atom

(atom x) 當 x 是一個原子或者空表時返回原子 t,否則返回空表 ()。在 Lisp 中我們習慣用原子 t 表示真,而用空表 () 表示假。

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

現在我們有了第一個需要求出自變數值的操作符,讓我們來看看 quote 操作符的作用——通過引用(quote)一個表,我們避免它被求值。一個未被引用的表達式作為自變數,atom 將其視為代碼,例如:

> (atom (atom 'a))
t

反之一個被引用的表僅僅被視為表

> (atom '(atom 'a))
()

引用看上去有些奇怪,因為你很難在其它語言中找到類似的概念,但正是這一特徵構成了 Lisp 最為與眾不同的特點——代碼和數據使用相同的結構來表示,而我們用 quote 來區分它們。

基本操作符3 eq

(eq x y) 當 x 和y 的值相同或者同為空表時返回t,否則返回空表 ()

> (eq 'a 'a)
t
> (eq 'a 'b)
()
> (eq '() '())
t

基本操作符4 car

(car x) 要求 x 是一個表,它返回 x 中的第一個元素,例如:

> (car '(a b))
a

基本操作符5 cdr

(cdr x) 同樣要求 x 是一個表,它返回x中除第一個元素之外的所有元素組成的表,例如:

> (cdr '(a b c))
(b c)

基本操作符6 cons

(cons x y) 要求 y 是一個表,它返回一個表,這個表的第一個元素是 x,其後是 y 中的所有元素,例如:

> (cons 'a '(b c))
(a b c)
> (cons 'a (cons 'b (cons 'c ())))
(a b c)

基本操作符7 cond

(cond (p1 e1) ...(pn en)) 的求值規則如下. 對「條件表達式p」依次求值直到有一個返回t. 如果能找到這樣的p表達式,相應的「結果表達式e」的值作為整個cond表達式的返回值.

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

當表達式以七個原始操作符中的五個開頭時,它的自變數總是要求值的.2 我們稱這樣 的操作符為函數 .

Common LISP的Hello World程序

下面是一個在標準輸出設備上輸出Hello World的簡單程序,這種程序通常作為開始學習程式語言時的第一個程序:

(format t "Hello, world!~%")

參見

外部連結

fuck





stock | retire | vm
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History