LISP 維基百科

LISP

維基百科,自由的百科全書
跳轉到: 導航,搜索
Lisp
Lisplogo alien 256.png
多範型: 函數式, 過程式, 反射式, 元編程
發行時間
1958
設計者
約翰·麥卡錫
實作者
Steve Russell, Timothy P. HartMike Levin
動態類型, 強類型
衍生副語言
Common Lisp, Scheme, Emacs Lisp, AutoLISP, Logo, Clojure, ISLISP, Newlisp, Arc, SKILL, Racket
影響語言
ML, Perl, Python, Smalltalk, Ruby, Dylan, Haskell, Mathematica, REBOL, Qi, Lua, JavaScript, LPC, Forth, Nu語言, OPS5, CLU, Falcon, Io語言, Ioke, MDL, FPr

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

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

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

目錄

歷史

基本介紹

LISP 是第一個函數型編程語言,區別於C/Java等命令型編程語言。

由於歷史的原因,Lisp長期以來被認爲主要用於AI領域,但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 'a)的結果(t)被求出,並代入(atom (atom 'a)),成爲(atom t),而這個表達式的結果是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) 返回一個cons cell (x y),例如:

> (cons 'a 'b)
(a . b)

一個cons cell的第二項如果是另一個cons cell,就表示成表的形式,例如:

(a . (b . c))

就表示成

(a b . c)

若一個cons cell第二項爲空,就省略不寫,例如:

(a . (b . ()))

表示爲

(a b)

這樣,多重的cons cell就構成了表:

> (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

函數

當表達式以七個原始操作符中的五個開頭時,它總會對其自變量求值的. 我們稱這樣的操作符爲函數 .

語法和語義

Scheme LISP的Hello World程序

(display "Hello world")

Common LISP的Hello World程序

(format t "Hello world")

參見

Wikibooks-logo.svg
您可以在維基教科書中查找此百科條目的相關電子教程:

外部鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章