Elisp:如果我有其他想法,我怎么表达

Elisp:如果我有其他想法,我怎么表达,lisp,elisp,Lisp,Elisp,在elisp中,if语句逻辑只允许if case和else case (if (< 3 5) ; if case (foo) ; else case (bar)) (如果(

在elisp中,if语句逻辑只允许if case和else case

(if (< 3 5) 
  ; if case
    (foo)
  ; else case
    (bar))
(如果(<35)
;如有
(富)
;其他情况
(酒吧)
但是如果我想做另一个if呢?是否需要在else案例中添加新的if语句?看起来有点乱。

如果 由于
(if test expression然后expression else expression)
一个
else if
将嵌套一个新的
if
作为
else表达式

(if test-expression1
    then-expression1
    (if test-expression2
        then-expression2
        else-expression2))
使用条件 在其他语言中,
else if
通常处于同一级别。在lisps中,我们有
cond
。这里的条件与
条件完全相同:

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

请注意,表达式可以就是这样。任何经常使用的表达式都类似于
(some-test-p some variable)
,而其他表达式通常也是。它们很少只是要计算的单个符号,但可以用于非常简单的条件。

请看,我想说“use
cond
”可能是最惯用的解决方案。有时,使用嵌套的ifs会更清晰,但这是非常罕见的,因此“使用
cond
”是明智的第一种方法。@Vatine我同意,只要if树在一个分支上很重。如果你有这样的
(If(red?o)(If(square?o)'red square'red-round)(If(square?o)'blue square'blue-round)(如果(square?o)'blue-round)
你得到的测试远少于
(cond((and(red?o)(square?o)(square。对于平均每次3.25次测试,与2次测试相比,使用
cond
时,代码稍微混乱一些。如果在
if
上没有使用任何额外功能,我就不会使用
cond
。例如,
(如果测试,那么其他)
我从不以
cond
的身份写作,这也是我没有说“永远不要使用它”的原因之一。有时,嵌套的
if
(或多个
when
,包装在
中,内部带有
if
)比
条件更清晰。