Elisp:我怎么能表达else-if

Cam*_*ron 9 lisp elisp

在elisp中,if语句逻辑只允许我使用if case和else case.

(if (< 3 5) 
  ; if case
    (foo)
  ; else case
    (bar))
Run Code Online (Sandbox Code Playgroud)

但如果我想做别的话怎么办?我是否需要在else案例中添加新的if语句?它看起来有点乱.

Syl*_*ter 18

嵌套if

由于各部分(if test-expression then-expression else-expression)else if将是巢新if作为else-expression:

(if test-expression1
    then-expression1
    (if test-expression2
        then-expression2
        else-expression2))
Run Code Online (Sandbox Code Playgroud)

使用cond

在其他语言中,else if通常是在同一水平上.在lisps我们有cond这个.这与以下内容完全相同cond:

(cond (test-expression1 then-expression1)
      (test-expression2 then-expression2)
      (t else-expression2))
Run Code Online (Sandbox Code Playgroud)

请注意,表达式可以就是这样.任何表达通常都是这样的(some-test-p some-variable),其他表达通常也是如此.它们很少只是被评估的单个符号,但它可以用于非常简单的条件.