(defun both (ListA ListB newlist) ; Bildet die Schnittmenge 2er Listen (message "%S %S" (car ListA) newlist) (if (member (car ListA) ListB) ; Wenn das erste Element von ListA in ListB ist (if (member (car ListA) newlist) ; Wenn das erste Element von ListA in newlist ist () ; Mache nichts (push (car ListA) newlist) ; Schreibe das erste Element von ListA in newlist ) ) (pop ListA) ; Verwirf das erste Element von ListA (if (eq (= 0 (length ListA)) nil) ; Wenn ListA nicht leer ist (both ListA ListB newlist) ; Rekursiver Aufruf ) (reverse newlist) ; newlist umdrehen ) (message"Liste A: %S" (setq ListA '(1 2 3 4)) ) ; Beispielliste A (message"Liste B: %S" (setq ListB '(2 4 8 16)) ) ; Beispielliste B (setq newlist ()) ; leere Liste (setq newlist ()) ; leere Liste (message "%S" (both ListA ListB newlist)) ; Rufe both (ListeA ListeB newlist) auf und gib ihr letztes Argument zurück