aif

Bei aif handelt es sich um ein anaphorisches Macro, das eine Fallunterscheidung trifft.

Das Macro erwartet drei Argumente. Das erste Argument, der Test, wird ausgewertet. Wenn das Ergebnis der Auswertung ungleich nil ist, wird das zweite Argument ausgewertet, ansonsten das dritte.

Der Unterschied zu if besteht darin, dass das zweite (und dritte) Argument in einer Umgebung ausgewertet wird, in der das Symbol it an das Ergebnis des Tests gebunden ist.

Das Macro basiert im Wesentlichen auf let und if.

(setq aif
  (mlambda args
    (quasi-quote
      (let
        ((it (unquote (first args))))
        (if
          it
          (unquote (second args))
          (unquote (third args)))))))