cdr car
car 得到一个列表的第一个元素,cdr 得到除第一个元素的所有元素。
(car '(春眠不觉晓
处处闻啼鸟
夜来风雨声
花落知多少))
assoc
(setq trees '((pine . cones) (oak . acorns) (maple . seeds))) (assoc 'oak trees)
和 cdr 或 car 搭配很常用:
(cdr (assoc "lang" '(("lang" . "c")
lang two)))
insert
在光标当前位置处插入字符串:
(insert "测试")
如果在上面的列表行尾按 "C-x C-e","测试" 字符串会显示在括号了。这里有一 个实际的例子,摘自 Muse (lisp/muse.el),主要作用是定义一个函数 muse-version ,如果使用时候不带参数,或者参数为 nil (假、空),那么就 显示 muse-version 变量的值 (Emacs 中变量和函数可以同名),反之,在当前 光标处插入 muse-version 变量的值:
;; insert 是可选参数 ( &optional 决定)
(defun muse-version (&optional insert)
"Display the version of Muse that is currently loaded.
If INSERT is non-nil, insert the text instead of displaying it."
(interactive "P")
(if insert
(insert muse-version)
(message muse-version)))
memq
(memq elt list)
如果 elt 不等于 list 中的任何元素,返回 nil 。使用 eq 比较 反之返回值为从第一匹配的元素到结尾元素的列表。
(memq 'three '(two one three four three five)) ;==> (three four three five)
实例分析 (lisp/muse.el) :
(memq system-type '(ms-dos windows-nt))
我的系统是 berkeley-unix (system-type 变量值),所以上面列表返回值为 nil。
condition-case
第一参数可以为 nil (什么都不做),第二个参数为正常执行的代码块,第三个参数为出错执行的代码:
(condition-case nil ; nil 什么都不做 (require 'museeee) ; 正常时执行的代码块 (error "error")) ; 出错时执行
