Download presentation
Presentation is loading. Please wait.
Published byῬόδη Βλαχόπουλος Modified 6年之前
1
陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
第十一章 LISP 程式語言 陳維魁 博士 儒林圖書公司
2
大綱 簡介 劍橋波蘭式 常見的函數 自定函式 控制結構 精選習題
3
簡介 LISP(LISt Processing language)發展於1950年代末期
主要是應用在人工智慧(artificial intelligence)的領域,又稱為人工智慧的低階語言 LISP語言是以解譯器(interpreter)來處理其程式 基本的資料結構是S-運算式(S-expression),其中S-運算式又可區分為串列(list)與原子(atom)二種 採垃圾收集法(garbage collection)管理記憶體 垃圾收集法指的是系統會主動地收集程式中不再使用的記憶體空間 優點是減輕了程式設計師的負擔 缺點則是每次系統收集不再使用的記憶體往往費時過長,而且不知何時會開始進行收集的動作 函數式程式語言
4
劍橋波蘭式 LISP運算式的表示法採劍橋波蘭式(Cambridge-polish form),即前置式加上括號
5
常見的函數 quote setq set 算術函數: 對引數不作任何的處理,直接傳回引數的內容 指定變數的值 加法:plus (+)
減法:difference (-) 除法:quotient (/) 乘法:times (*)
6
常見的函數 car cdr (1)作用:傳回引數的第一個元素 (2)限制:引數必須是串列(list)且引數僅有一個 (3)實例
(car ′(Pascal Prolog PL/1))=Pascal 【注意:傳回的結果可能是原子或串列】 cdr (1)作用:除去引數的第一個元素後,傳回剩下的串列 (2)限制:引數必須是串列且引數僅有一個。 (cdr ′(Pascal Prolog PL/1))=(Prolog PL/1) 【注意:傳回的結果是一串列】
7
常見的函數 rplaca rplacd append cons 將第一個引數的car以第二個引數的car替代
將第一個引數的cdr以第二個引數的cdr替代 append 用法為(append a1 a2 ... an)=(b1 b2 ... bn) 其中ai, 1 i n,為串列(list), 而bi, 1 i n,則為ai去掉括號後之結果 cons 對二個參數作求值的動作,結果是把第一個引數加入第二個引數中以形成新串列
8
常見的函數 length 計算參數的長度 (length '(A B C))=3 reverse 將參數反轉
9
自定函式 LISP語言提供了使用者以“defun”來自行定義函式。 自行定義的函式,結構包含三個部分:
(1) 函式名稱 (2) 型式參數串列 (3) 程式段 (defun 函式名稱(型式參數串列) ( 程式段 ) ) defun提供的功能是將上述(1),(2),(3)連接在一起提供給使用者使用,並不會對(1),(2),(3)中之任何一者作求值的動作
10
述句 LISP語言測試條件的結構稱為述句(predicate) LISP語言常見的述句 atom:判斷參數是否為原子(atom)
listp:判斷參數是否為串列(list) equal (e1 e2):比較e1與e2 member (e1 e2): 限制:e2必須是串列(list)。 作用:檢查e1是否為e2的一部分。member函數具有二個引數。其中第二個引數被限定為必須是個串列(list)。member函數的功能是檢查第二個引數中是否出現第一個引數。若結果為真,則傳回在第二個引數中第一個引數出現的位置以後的部份,若結果為假,則傳回nil
11
述句 LISP語言常見的述句 plusp:判斷參數的值是否大於0 minusp:判斷參數的值是否小於0 zerop:判斷參數的值是否為0
numberp: 判斷參數是否為數值 null:判斷參數是否為nil greaterp e1 e2 若e1>e2,則t 若e1<=e2,則nil
12
述句 LISP語言常見的述句 lessp e1 e2:
若e1<e2,則t 若e1>=e2,則nil and e1 e2 ... en:若e1、e2、...、en全為true,則t,否則nil or e1 e2 ... en:e1、e2、...、en中若有一者為true,則t,否則nil not:若參數值為nil則結果為t,否則為nil
13
LISP 語言的條件式 LISP語言的條件式即為cond結構 cond結構可以處理任意數目的參數,這些參數即稱為cond子句
每個cond子句由一連串的S運算式所組成 cond子句由二個部份所組成 第一個部份是要測試的條件 第二個部份則是測試的條件成立時必須執行之部份
14
LISP 語言的條件式 語法 ( cond (條件 1 Exp1) (條件 2 Exp2) (條件 3 Exp3) (條件 n Expn) )
15
精選習題 LISP程式如下,其作用為何? (defun xxx(S)) (cond ((null S) 0) ((atom S) 1) (t (plus (xxx (car S)) (xxx (cdr S))))))
16
精選習題 試簡述下列LISP函數f的功能,並舉例說明之
(defun f(lst) (cond ((null lst) nil) ((atom lst)(list lst)) (t(append(f(car lst))(f(cdr lst)))))
17
精選習題 試簡述下列LISP函數g的功能,並舉例說明之
(defun g(list) (cond ((null list)nil) (t (append (g(cdr list)) ((cons(car list)nil))))))
18
精選習題 試簡述下列LISP函數STRANGE的功能,並舉例說明之
(defun STRANGE(L) (cond ((null L) nil) ((atom L) L) (t (cons (STRANGE (car L)) (STRANGE (CDR L))))))
Similar presentations