如何在elisp'if'语句中编写多个语句?

Mar*_*ote 64 syntax elisp

在elisp中,有一个'if'的情况,我希望执行许多不同的事情:

(if condition
    (do-something)
    (do-something-else)
    ...)
Run Code Online (Sandbox Code Playgroud)

但是,(do-something-else)仅在else-case中执行.如何指定要执行的指令块?例如:

(if condition
    (begin
        (do-something)
        (do-something-else)
        ...))
Run Code Online (Sandbox Code Playgroud)

mip*_*adi 80

用途progn:

(if condition
    (progn
        (do-something)
        (do-something-else)))
Run Code Online (Sandbox Code Playgroud)


Tre*_*son 44

如果没有else必要,使用它可能更具可读性:

(when condition
    (do-something)
    (do-something-else))
Run Code Online (Sandbox Code Playgroud)

而且,这是相反的

(unless (not condition)
    (do-something)
    (do-something-else))
Run Code Online (Sandbox Code Playgroud)

查看Emacs Lisp手册了解条件.

  • FWIW,我通常遵循*Common Lisp中使用的惯例使用`when`和`unless`时返回值不重要(即,它们仅用于副作用).当返回值很重要时,我通常使用`和`和`或`.当有多个分支时(无论返回值是否重要),我通常使用`if`和`cond`. (2认同)