本基本介紹翻譯自 Emacs 高手 Xah Lee 的介紹文章,予以中文化!
七:If、Then、Else
條件語句的語法是: (if ‹test› ‹body›)。若欲包含 else 的部分,則是 (if ‹test› ‹true body› ‹false body›)
(if (< 3 2) (message "yes") )
(if (< 3 2) (message "yes") (message "no") )
(if nil (message "yes") (message "no") ) ; prints no
詳情可見:(info "(elisp) Control Structures")
若不需要 else,也可改用 when 這個函數。他的結構是: (when ‹test› ‹expr1› ‹expr2› …),等同於 (if ‹test› (progn ‹expr1› ‹expr2› …))
八:語句塊:
如何組織一連串的程式句?可以使用 progn
(progn (message "a") (message "b"))
;; 等同於
(message "a") (message "b")
(progn …) 與 C 語言中的 {…} 類似。共用是可將多個句子當成一個句子來處理與對待。
(if something
(progn ; true
…
)
(progn ; else
…
)
)
詳情可見:(info "(elisp) Sequencing")
九:迭代(Iteration)
底下是一段使用 while 函數的 loop 結構,他的語法是:(while ‹test› ‹body›),‹body› 是一個或多個 elisp 語句。
(setq x 0)
(while (< x 4)
(print (format "yay %d" x))
(setq x (1+ x)))
詳情可見:(info "(elisp) Iteration")
底下的程式碼執行 unicode char 32 轉換到 126 的工作。首先設定局部變數,然後啓動 while loop,將對應的 unicode char 插入,然後增加計數單位 1
(let ((x 32))
(while (< x 127)
(ucs-insert x)
(setq x (+ x 1))))
注意:在 elisp 中,沒 for 這樣的結構
Emacs Lisp: Throw & Catch, Exit a Loop.