and

Das Prädikat and liefert die Und-Verknüfung mehrerer Ausdrücke, indem die Ausdrücke expr-1, expr-2, ..., expr-n von links nach rechts ausgewertet werden, bis eine Auswertung den Wert nil ergibt oder expr-n ausgewertet wurde. Der Wert des gesamten And-Ausdrucks

(and expr-1 expr-2 ... expr-n)

ist der Wert des letzten ausgewerteten Ausdrucks expr-i.

> (and 1 2 nil 3)
nil

> (and 1 2 3 4)
4

> (and)
t


Das Prädikat and ist als rekursives Macro realisiert:

(setq and
  (mlambda l
    (if
      (null? l)
      (quote t)
      (if
        (null? (cdr l))
        (car l)
        (list
          (quote if)
          (car l)
          (cons (quote and) (cdr l))
          nil)))))


Seine Zwischenformen sind t, wenn kein Ausdruck übergeben wird, oder sie entspricht dem Ausdruck, wenn er der einzige Ausdruck ist, oder er entspricht dem if-Ausdruck:

(if
  expr-1
  (and expr-2 expr-3 ...)
  nil)