Elisp 简介: Emacs有三份手册.第一份是使用手册, 第二份是Elisp 手册, 第三份是 Elisp 简介. 第三份的程度是入门级, 值得看. Elisp手册其实也写的 很简单, 还教你lisp, 不过有点长, 适合参考. 因为我lisp没有仔细学过, 所以: 以下所言, 如有巧合, 那才是真的. Basic data type 字串 (string) "Hello, World" 字元 (char) ?a ; 问号开头 atom & list: (1 2 3 4) 是一个list, 由 4个 atom 组成. pair: 中间是句点. (apple . 2) alist (associated list) 就是一堆 pair的集合,就像perl/tcl的associative array. 或者说是一个资料库, 一堆 (key, value) pair. '((Apple . 1) (Orange . 2) (PineApple . 3)) vector (?) emacs 19用vector 来表示按键(key strok sequence) [f1] [f2] [f1 a] nil 就是空的list, 或者表示 false t true Forms 我们写程式最好有样版让我们填空最简单了. Form 就是样版, 不过意义不太一样. Form 就是Elisp 可以接受的句型. lisp 解译器 预设是对list的每个元素求值(evaluate), 除非是 special form, 有特殊的定义. 比如说 (defun FUNC (ARG-LIST) BODY ...) 就是一个special form, 用来定义函式, 所以FUNC 不会被 求值, 被当成symbol, ... (quote (LIST)) 这也是个special form, 叫 lisp 把 (LIST)当做symbol就好了, 不要 evaluate. quote 很常用, 所以有个缩写: '(LIST) 等於 (quote (LIST)) 'Asymbol 可以表示一个Atom, 名称叫Asymbol set 可以产生/定义新的变数. (set 'hello 1) ; hello = 1 ; 注意我们用 'hello, 所以lisp不会evaluate hello的值. 这家伙很常用, 也有简写. (setq hello 1) setq 就是set quote 的缩写. 这是个 special form, 不会对 第二个元素求值. valuation 在Emacs下, C-x C-e 可以执行(evaluate, 求值)游标左边的叙述. 结果会出现在minibuffer. lisp-interaction-mode中 C-j 可以evaluate, 并且把结果append到 buffer. lisp 程式由一堆list 构成.称为expression. 每个expression 都回传回一个值. 有些expression有副作用, 如删掉一个字. (这跟C 的int delete_char() 意思一样, 它传回int, 并且删掉某个char) 定义函式: (defun NAME (ARGS-LIST) "注解" ; optional (interactive) ; optional BODY) 定义一个叫NAME的函式. BODY 是一堆expression. 注解是用来给C-h f显示的. (interactive) 表示这个函示会和user/buffer作用. (interactive "B") 表示执行此函式先问user一个buffer的名字, 然後当作参数传给它. (如, 当user透过key-binding 或者 M-x 呼叫此函式时) (interactive "BAppend to buffer: r") 问user buffer name时, 提示号 Append to buffer: 此function有两个引数,第一个是B, 就是buffer 第二个是r, region 用 隔开. (interactive "p") 用C-u 设的prefix 把它当作参数传给我. 预设值==4. C-u C-f 向右移四个字 一些lisp 函式: (list 1 2 3 4) 产生 '(1 2 3 4) (car '(1 2 3 4) 1 (cdr '(1 2 3 4) '(2 3 4) (cons 1 '(2 3 4)) '(1 2 3 4) (cons 1 2) (1 . 2) (cons 0 (cons 1 (cons 2 nil))) 等於 '(0 1 2) {list 是用 pair 串起来的, 用C 表示: pair: {Object *first, Object *second}; *(pair[i].first) == i; pair[i].second == pair[i+1]; } (cons '(1 2) '(3 4)) '((1 2) 3 4) (setq a 1) (1+ a) ; a+1
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:Python入门(一)----什么是python?python及模块的安装
下一篇:安装,配置rp-pppoe拨号软件,使adsl成功上网