- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 LISP 程式語言
第十一章 LISP 程式語言
陳維魁 博士
wkchen@.tw
儒林圖書公司
大綱
簡介
劍橋波蘭式
常見的函數
自定函式
控制結構
精選習題
簡介
LISP(LISt Processing language)發展於1950年代末期
主要是應用在人工智慧(artificial intelligence)的領域,又稱為人工智慧的低階語言
LISP語言是以解譯器(interpreter)來處理其程式
基本的資料結構是S-運算式(S-expression),其中S-運算式又可區分為串列(list)與原子(atom)二種
採垃圾收集法(garbage collection)管理記憶體
垃圾收集法指的是系統會主動地收集程式中不再使用的記憶體空間
優點是減輕了程式設計師的負擔
缺點則是每次系統收集不再使用的記憶體往往費時過長,而且不知何時會開始進行收集的動作
函數式程式語言
劍橋波蘭式
LISP運算式的表示法採劍橋波蘭式(Cambridge-polish form),即前置式加上括號
常見的函數
quote
對引數不作任何的處理,直接傳回引數的內容
setq
指定變數的值
set
指定變數的值
算術函數:
加法:plus (+)
減法:difference (-)
除法:quotient (/)
乘法:times (*)
常見的函數
car
(1)作用:傳回引數的第一個元素
(2)限制:引數必須是串列(list)且引數僅有一個
(3)實例
(car ′(Pascal Prolog PL/1))=Pascal
【注意:傳回的結果可能是原子或串列】
cdr
(1)作用:除去引數的第一個元素後,傳回剩下的串列
(2)限制:引數必須是串列且引數僅有一個。
(3)實例
(cdr ′(Pascal Prolog PL/1))=(Prolog PL/1)
【注意:傳回的結果是一串列】
常見的函數
rplaca
將第一個引數的car以第二個引數的car替代
rplacd
將第一個引數的cdr以第二個引數的cdr替代
append
用法為(append a1 a2 ... an)=(b1 b2 ... bn)其中ai, 1 ? i ? n,為串列(list),而bi, 1 ? i ? n,則為ai去掉括號後之結果
cons
對二個參數作求值的動作,結果是把第一個引數加入第二個引數中以形成新串列
常見的函數
length
計算參數的長度
(length (A B C))=3
reverse
將參數反轉
自定函式
LISP語言提供了使用者以“defun”來自行定義函式。
自行定義的函式,結構包含三個部分:
(1) 函式名稱
(2) 型式參數串列
(3) 程式段
(defun 函式名稱(型式參數串列) ( 程式段 ))
defun提供的功能是將上述(1),(2),(3)連接在一起提供給使用者使用,並不會對(1),(2),(3)中之任何一者作求值的動作
述句
LISP語言測試條件的結構稱為述句(predicate)
LISP語言常見的述句
atom:判斷參數是否為原子(atom)
listp:判斷參數是否為串列(list)
equal (e1 e2):比較e1與e2
member (e1 e2):
限制:e2必須是串列(list)。
作用:檢查e1是否為e2的一部分。member函數具有二個引數。其中第二個引數被限定為必須是個串列(list)。member函數的功能是檢查第二個引數中是否出現第一個引數。若結果為真,則傳回在第二個引數中第一個引數出現的位置以後的部份,若結果為假,則傳回nil
述句
LISP語言常見的述句
plusp:判斷參數的值是否大於0
minusp:判斷參數的值是否小於0
zerop:判斷參數的值是否為0
numberp: 判斷參數是否為數值
null:判斷參數是否為nil
greaterp e1 e2
若e1e2,則t
若e1=e2,則nil
述句
LISP語言常見的述句
lessp e1 e2:
若e1e2,則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
LISP 語言的條件式
LISP語言的條件式即為cond結構
cond結構可以處理任意數目的參數,這些參數即稱為cond子句
每個cond子句由一連串的S運算式所組成
cond子句由二個部份所組成
第一個部份是要測試的條件
第二個部份則是測試的條件成立時必須執行之部份
L
文档评论(0)