Elisp 控制结构
顺序执行
无法用 eval-last-sexp
同时执行两个表达式,这时就需要 progn
这个特殊表达式:
(progn A B C ...)
条件判断
elisp 有两个最基本的条件判断表达式 if
和 cond
。使用形式分别如下:
(if condition then else) (cond (case1 do-when-case1) (case2 do-when-case2) ... (t do-when-none-meet))
使用的例子如下:
(defun my-max (a b) (if (> a b) a b)) (my-max 3 4) ; => 4 (defun fib (n) (cond ((= n 0) 0) ((= n 1) 1) (t (+ (fib (- n 1)) (fib (- n 2)))))) (fib 10) ; => 55
还有两个宏 when
和 unless
,从它们的名字也就能知道它们是作什么用的。使用这两个宏的好处是使代码可读性提高, when
能省去 if
里的 progn
结构, unless
省去条件为真子句需要的的 nil
表达式。
循环
循环使用的是 while
表达式。它的形式是:
(while condition
body)
比如:
(defun factorial (n) (let ((res 1)) (while (> n 1) (setq res (* res n) n (- n 1))) res)) (factorial 10) ; => 3628800