前言
Lisp的全名叫做LISt Processor,事實上內部大部分的元素都是一種表,而且是一種二元樹(binary tree)表。
在LISP裡面有用括號圍起來的都叫做表(table? tree?),比如說
(+ 1 2) '(hello world)
而沒有用括號圍起來的都是原子,翻譯應該是Atom(我亂唬爛的)。
比如說上面的
'(hello world)
裡面就有兩個元素hello
跟world
。
空白的表,通常會傳回
()
或是NIL
表操作指令
CAR
好,我在上面有寫到,在LISP裡面其實是用二元樹表儲存所有的資料。所以可以利用一些內建函數去取出裡面的內容。
而CAR是用來取出二元樹的左分支用的內建函數
而CAR是用來取出二元樹的左分支用的內建函數
我們假設有個表長得像
某網站有寫到
'(a b c d)
,以下的敘述會抓到左分支,也就是a
。
(car '(a b c d))記得我上一篇有寫到,LISP裡面是沒有大小寫之分的,所以
CAR
和car
在LISP中都是一樣的指令。某網站有寫到
FIRST
是CAR
的全名,但是在AutoCAD中並不支援...所以還是乖乖開CAR
吧
CDR
有抓到二元樹的左枝了,那也要想辦法抓右枝阿。抓右枝的函數在LISP裡面就叫做
CDR
。
(CDR '(a b c d))結果會是
(b c d)
其他的表元素抽取函數?
好,我們能抽取出左分支,也能抽出右分枝。那我們來練習一下取出第二個元素好了。要在一串LIST裡面取出第二個元素,第二個元素其實就是右分支的左分支,我們可以這樣寫
(CAR (CDR '(a b c d)))很長喔,所以在AutoLISP裡面有短縮版,就是
CDAR
(CADR '(a b c d))都一樣可以得到我們想要的結果:取得元素b。
那如果我們要取出第三元素呢?OK, AutoLISP又有短縮版可以取得第三元素以後的右分支,
接下來就不用教了吧(笑),開CAR去把左元素取出來阿。
CDDR
(CDDR '(a b c d))他會傳回(3 4)這個表。當然也可以用古老式的逼供法
(CDR (CDR '(a b c d)))他一樣會傳會(3 4)這個表。
接下來就不用教了吧(笑),開CAR去把左元素取出來阿。
(CAR (CDDR '(a b c d)))也可以縮寫成以下形式
(CADDR '(a b c d))以此類推...要記得不要把A卡在右元素,你會拿不到內容阿(笑)