Elisp:如果我有其他想法,我怎么表达
在elisp中,if语句逻辑只允许if case和else caseElisp:如果我有其他想法,我怎么表达,lisp,elisp,Lisp,Elisp,在elisp中,if语句逻辑只允许if case和else case (if (< 3 5) ; if case (foo) ; else case (bar)) (如果(
(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)
,而其他表达式通常也是。它们很少只是要计算的单个符号,但可以用于非常简单的条件。请看,我想说“usecond
”可能是最惯用的解决方案。有时,使用嵌套的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
)比条件更清晰。