2016-11-19 37 views
6

在elisp中,if語句邏輯只允許我有if case和else case。Elisp:我怎麼能表達其他 - 如果

(if (< 3 5) 
    ; if case 
    (foo) 
    ; else case 
    (bar)) 

但是如果我想要做別的 - 如果?我需要在else情況下放置一個新的if語句嗎?它看起來有點混亂。

+3

請參閱['cond'](https://www.gnu.org/software/emacs/manual/html_node/elisp/Conditionals.html) – jkiiski

回答

11

嵌套如果

由於(if test-expression then-expression else-expression)else if部分將巢新ifelse-expression

(if test-expression1 
    then-expression1 
    (if test-expression2 
     then-expression2 
     else-expression2)) 

使用COND

在其他語言的else if通常是在同一水平。在lisps我們有cond。這裏是完全相同的用cond

(cond (test-expression1 then-expression1) 
     (test-expression2 then-expression2) 
     (t else-expression2)) 

注意,一個表達式可以是公正的。任何經常表達的表達方式都像(some-test-p some-variable),其他表達式通常也是如此。很少有他們僅僅是被評估的單個符號,但它可以用於非常簡單的條件。

+1

我會說「use cond'」可能是最習慣的解。有時候,嵌套ifs會使事情變得更加清晰,但很少有人認爲「use cond」是一種明智的第一種方法。 – Vatine

+0

@Vatine我同意只要if樹在一個分支上很重。如果你有這樣的話(如果(紅色?)(如果(方形?o)'紅色方形'紅色圓形)(如果(方形?o)'藍色方形'藍色圓形) ((cond((和(red?o)(square?o))'red-square)((red?o)'red-round)((square?o)'blue-square) (t'藍色圓形))'。對於平均每次3.25次測試和2次測試,使用'cond'代碼稍微混亂一點。如果我沒有使用'if'中的任何額外功能,我從不使用'cond'。例如。 '(如果測試然後其他人)'我永遠不會寫'cond' – Sylwester

+0

是的,我沒有說「永遠不會使用它」的原因之一。有時候嵌套'if'(或者多個'when',用''或'包裹','用'if'裏面)比'cond'更清晰。 – Vatine

相關問題