这篇笔记,说明elisp相关的列表操作函数

(注,CAR是Contents of the Address part of the Register,表示列表的头一个元素;CDR是Contents of the Decrement part of the Register)

这种命名属于历史遗留问题.

 

*(cons  CAR CDR)

---将返回一个新的列表(CAR CDR),CAR表示列表的头一个部分,CDR表示列表除CAR的其余部分,后面还有"car,cdr"函数的意思也是这个.

说明,1)CDR至少是个空列表.2)不改变CDR

---示例

(cons 1 '(2 3)) => (1 2 3)

 

*(car LIST)

---返回列表的头元素,可能是一个列表,原子或nil.不改变原LIST.

---示例

(car '(a b c)) => a

 

*(cdr LIST)

---返回除头元素以外的剩余列表.不改变原LIST

---示例

(cdr '((1 2) 3)) => (3)

 

*(nthcdr N LIST)

---对LIST执行N次cdr操作后,返回的剩余列表.不改变原LIST

---示例

(nthcdr 2 '(1 (2 3) 4)) => (4)

 

*(setcar LIST newCAR)

---将LIST的CAR设置为newCAR,执行返回newCAR.

改变原LIST

---示例

(setq list '(1 2 3)) => (1 2 3)

(setcar list 'a) => a

list => (a 2 3)

 

*(setcdr LIST newCDR)

---将LIST的CDR部分设为newCDR,执行返回newCDR.

改变原LIST

---示例

(setq list '(1 2 3)) => (1 2 3)

(setcdr list (a b)) => (a b)

list => (1 a b)

(setcdr list ()) => nil

list => (1)

(setcdr list ()) => nil

list => (1)  ;;可见,setcdr对列表第一項无效,即使只有一项时

 

*(length LIST/STRING)

---返回列表元素个数或者字符串的字符数

---示例

(length '(1 2 3)) => 3

(length "海上升明月") => 5

posted on 2012-05-11 23:58  戴忠  阅读(815)  评论(0编辑  收藏  举报