複製鏈接
請複製以下鏈接發送給好友

lisp語言

鎖定
LISP語言(LISP,List Processing的縮寫)是一種早期開發的、具有重大意義的自由軟件項目。它適用於符號處理、自動推理、硬件描述和超大規模集成電路設計等。特點是,使用表結構來表達非數值計算問題,實現技術簡單。LISP語言已成為最有影響,使用十分廣泛的人工智能語言 [1] 
中文名
Lisp語言
外文名
Lisp Programming Language
類    別
計算機程序設計語言
創始時間
1958年
創始人
McCarthy
適用範圍
符號處理、自動推理、硬件描述和超大規模集成電路設計等

lisp語言歷史背景

20世紀50年代中期,在大多數計算機處理的都是數值數據等,包括語言學心理學和數學領域上一些人們開始對人工智能產生了興趣。覺得必須實現共同需要的一個方法,使計算機能夠處理鏈表中的符號數據,允許語言的處理、信息存入和檢索、定理證明的過程機器化。IBM是首先對人工智能開發有興趣的商業機構之一。
1958年夏天,來自麻省理工學院的人工智能研究先驅約翰·麥卡錫(John McCarthy)參與IBM資訊研究部的工作,研究符號運算及應用需求。可是,IBM旗下的Fortran表處理語言卻未能支持符號運算的遞歸、條件表達式、動態存儲分配及隱式回收等功能。John McCarthy於1958年秋季回到麻省理工學院後,和Marvin Minsky組成了人工智能項目。開發一個表處理軟件系統來實現McCarthy提出建議採納者程序的工作,之後推動了表處理語言LISP的產生。 [2] 

lisp語言發展歷程

1960年4月,McCarthy以《遞迴函數的符號表達式以及由機器運算的方式,第一部》為題,於ACM通訊上發表LISP設置。McCarthy的學生Steve Russell根據該論文,以IBM 704於麻省理工學院的計算機運算文中心成功執行了第一版的LISP。
1962年,McCarthy及人工智能小組按LISP 1的編譯基礎上改良出LISP 1.5版本。
1969年9月,史丹福大學人工智能實驗室的Lynn Quam與Whitfield Diffie推出的Stanford LISP 1.6廣泛地應用於使用TOPS-10系統的PDP-10計算機系中。Stanford LISP 1.6版本自麻省理工智能項目更新LISP 1.5成MACLISP及BBN科技公司推出的InterLisp成功後,漸被棄置。
自1960代末年至1980年初年,各種更新LISP版本湧現,有源自加大伯克來分校的Franz Lisp、在AutoCAD運行的AutoLISP前身XLISP、猶他大學開展的Standard Lisp及Portable Standard Lisp、專屬於Lisp機器上運行的ZetaLisp、源自法國國家信息與自動化研究所的LeLisp、以及MIT人工智能實驗室的Gerald Sussman與Guy Steele所開發的Scheme等。
1984年,改良自MacLisp、集各版本大成、跨平台、且被目為事實標準的Common Lisp誕生。至1994年,美國國家標準學會(ANSI)對Common Lisp語言進行了標準化。
自穩定運行的Common Lisp出現起,再有各機構按各自所需而開展後續Lisp,包括1990年來自歐洲用户的EuLisp及自由開源的IsLisp,ACL2等。

lisp語言數據結構

在LISP語言中,數據和函數都是採用符號表達式定義的,這種符號表達式稱為S一表達式,它是原子和表的總稱。原子分為符號原子和數原子。符號原子是指有限個大寫字母和數字組成的字符串,其中第一個符號必須是字母。原子NIL和T分別表示邏輯假(或空表)和邏輯真。數原子是指一串數字,通過符號表示其正負。 [3] 

lisp語言特點

(1)函數性
函數型語言的基本特點是用函數定義和函數調用構成程序。程序員用函數定義和函數調用組成的表達式來描述求解問題的算法,表達式的值就是問題的解。用FORTRAN、PAS—CAL和C等傳統程序設計語言編寫的程序是按一定順序執行的命令序列,執行結果就是問題的解。用這些語言編程時,程序員要規定求解的順序,即要描述控制流。用LISP語言編程只需要確定函數之間的調用,把函數執行的細節交給LISP系統來解決。因此,LISP語言是更加面向用户的語言。
傳統的程序設計語言是適應馮·諾依曼型計算機系統結構而發展起來的,LISP在諾依曼型計算機上運行的效率要低一些。計算機系統結構的發展,使得函數型語言有着廣闊的前途。為了適應當前微型機發展水平和程序員使用傳統語言編程的習慣,LISP語言增加了許多非函數型的語言成分,例如,prog、go等函數,所以,LISP已不是純函數型語言,它既具有函數語言的功能,又具有傳統語言的功能。
(2)遞歸性
遞歸函數是指在函數的定義中調用了這個函數本身。所有的可計算函數已被證明都可以用遞歸函數的形式來定義。
由於LISP的主要數據結構是表,而且表是用遞歸方法定義的,即表中的一個元素也可以定義為一個表,因此,程序員用LISP提供的自定義函數來定義用户自己的函數時,可以用遞歸函數的形式來定義自己的函數。自定義的遞歸函數能夠很方便地對遞歸定義的表進行操作。遞歸定義的方法使程序簡明、優美,程序員應充分利用遞歸程序設計方法。
(3)數據與程序的一致性
LISP的一段程序是用户的一個自定義函數,這個函數可被其他函數調用,或者説,一段程序可被其他程序調用。函數執行後的輸出數據稱為這個函數的返回值。一個函數被其他函數調用,就是調用了這個函數的返回值。在LISP中,函數與這個函數的返回值是一致的。這一特點使得LISP的編程就是定義一個宏函數,也使得LISP語言的擴充比較容易。可以根據應用領域的需要,使用LISP提供的基本函數擴充若干面向專門應用領域的宏函數。
(4)自動進行存儲分配
用LISP語言編程時,程序員完全可以不考慮存儲分配問題。程序中定義的函數、數據和表等都能在程序運行時,由LISP自動提供。對不再需要的數據,LISP自動釋放其佔用的存儲區。
(5)語法簡單
LISP的語法極其簡單,對變量和數據不需要事先定義和説明類型。LISP語言的基本語法就是函數定義和函數調用。因此,LISP語言的程序便於修改、調試和糾錯,可以邊實驗邊設計,通過不斷修改和增加用户自定義函數來構成複雜的系統。
LISP語言不僅在專家系統和CAD領域有廣泛的應用,在符號代數、定理證明、機器人規劃等領域也有廣泛的應用。影響LISP語言使用的主要原因有:一是LISP是非可視化語言;二是LISP在通用計算機上的運行效率較低;三是LISP的數值計算能力較差;四是人們對函數型語言的編程風格不習慣。 [4] 

lisp語言常見版本

LISP語言版本很多,常用的有:
(1)MACLISP語言:1971年由MIT人工智能實驗室研製,它比較注重效率、地址空間的保護和構造工具的靈活性。
(2)INTERLISP語言:1978年由DEC和XEROX公司開發,它強調即使在速度和存貯空間方面有所損失,也要儘可能地提供最好的程序環境。
(3)ZETALISP語言;在LISP機上實現。它和MACLISP關係密切,有很好的兼容性。並且對MACLISP進行了很多改進,提供了新的性能。
(4)QLISP語言:它嵌在INTERLISP中,能靈活處理大型數據庫,具有返回追蹤與模式調用功能。
(5)CommonLISP語言:它是在MACLISP的基礎上發展起來的,並參考了INTERLISP和ZETALISP,因而功能較強且擁有其它版本的一些優點,已被廣泛使用。
(6)GCLISP語言:它作為CommonLISP在PC機上實現的第一個縮本,自然具有ConlmonLISP的通用性特點,其程序電容易移植到其它版本的LISP環境之中。GCLISP和CommonLISP核心部分兼容,與ZETALISP的某些概念吻合,此外還擁有若干先進的數據類型,它着眼於讓機器有較強的處理能力和記憶功能,因而效率較高,用户易於掌握,使用比較廣泛。 [5] 
參考資料
  • 1.    謝希德主編.自然科學簡明手冊:上海文藝出版社,1996年11月
  • 2.    Rojas, Raúl; Hashagen, Ulf .The First Computers: History and Architectures.美國麻省劍橋市:MIT Press,2002:280-291
  • 3.    李士勇 夏承光編著.模糊控制和智能控制理論與應用:哈爾濱工業大學出版社,1990年12月
  • 4.    尹朝慶主編 尹皓 彭德巍編著.普通高等學校計算機專業精品課程教材 人工智能方法與應用:華中科技大學出版社,2007年08月
  • 5.    蘇德祥主編.微型計算機軟件使用手冊:東北工學院出版社,1991年12月