ELisp: How to execute multiple expressions in an else block?

How can I execute more than one expression in a elsestatement block ifwhen using ELisp?

+3
source share
2 answers

You do not need to do this progn, since this is already the default behavior:

C-h f if RET

if is a special form in the source code of C.

(if COND THEN ELSE ...)

If COND gives a non-zero, do THEN, NOT STILL ... Returns the value of THEN or the value of the last from ELSE.
THEN must be a single expression, but ELSE ... may be zero or more expressions.
If COND gives nil and no ELSE, the value is nil.

Reusing the sindikat example:

(if (> 1 2)
    (message "True")
  (message "False")
  (message "I repeat, completely false"))

, , progn, THEN.

+9

phils . else if, Emacs Lisp, .

Emacs Lisp Common Lisp, (, , - , -, -, , ), , progn, prog1, prog2. , , .

(progn 1 2 3 4 5) 5, (prog1 1 2 3 4 5) 1, (prog2 1 2 3 4 5) 2. , progn, prog1, prog2 . , α, β, γ, δ - ( *Messages* buffer), :

(progn (message "α") (message "β") (message "γ") (message "δ")) ; => "δ"
(prog1 (message "α") (message "β") (message "γ") (message "δ")) ; => "α"
(prog2 (message "α") (message "β") (message "γ") (message "δ")) ; => "β"

3 Emacs Lisp, Common Lisp. , 3 rd? prog3. ! γ:

(progn (message "α") (message "β") (prog1 (message "γ") (message "δ"))) ; => "γ"
(prog1 (progn (message "α") (message "β") (message "γ")) (message "δ")) ; => "γ"
(prog2 (message "α") (progn (message "β") (message "γ")) (message "δ")) ; => "γ"
(prog2 (message "α") (prog2 (message "β") (message "γ") (message "δ"))) ; => "γ"

Common Lisp if, :

(if t
    (progn (message "ε") (message "ζ"))
    (progn (message "η") (message "θ"))) ; returns ζ
(if nil
    (progn (message "ε") (message "ζ"))
    (progn (message "η") (message "θ"))) ; returns θ

Emacs Lisp then progn, prog1, prog2, else , , phils . Emacs Lisp (if nil 1 2 3) 3, Common Lisp too many parameters for special operator IF.

. : "8.1.4 " " progn" " Emacs Lisp Intro ".

+3

All Articles