when

Das Macro when erwartet eine Liste von mehreren Argumenten. Wenn das erste Argument, der Test, einen Wert ungleich nil hat, dann werden die weiteren Argumente ausgewertet. Das Resultat ist der Wert des letzten Arguments. Wenn das erste Argument zu nil auswertet, werden die anderen Argumente nicht ausgewertet.

> (when nil 1 2)
nil

> (when t)
nil

> (when t 1 2 3)
3


Das Macro when beruht auf if, first, rest, cons, list und progn:

(setq when
  (mlambda l
    (list
      if
      (first l)
      (cons
        progn
        (rest l))
      nil)))