Lisp Funktionen

cond

(defun pudding-eater (person)
     (cond ((eq person 'henry) (setf *arch-enemy* 'stupid-lisp-alien)
                        '(curse you lisp alien – you ate my pudding))
             ((eq person 'johnny) (setf *arch-enemy* 'useless-old-johnny)
                        '(i hope you choked on my pudding johnny))
              (t                '(why you eat my pudding stranger ?))))

Die Cond- Form ist die klassische Art der Verzweigung in Lisp. cond arbeitet in diesem Beispiel 3 Zweige ab.

assoc

(assoc 'garden *nodes*)
(GARDEN (YOU ARE IN A BEAUTIFUL GARDEN. THERE IS A WELL IN FRONT OF YOU.))

assoc kann eine List abarbeiten, um dann ein Listenpaar auszugeben.

(defun describe-location (location nodes)
(cadr (assoc location nodes)))

Oder halt nur einen Teil eines Listenpaares.

car, cdr, cadr, cdar, cddr, caddr, cddar, cadadr

Es geht um das Auslesen von Listen.

> (car '((peas carrots tomatoes) (pork beef chicken)))
(PEAS CARROTS TOMATOES)
> (cdr '(peas carrots tomatoes))
(CARROTS TOMATOES)
> (cdr (car '((peas carrots tomatoes) (pork beef chicken))))
(CARROTS TOMATOES)
> (cdar '((peas carrots tomatoes) (pork beef chicken)))
(CARROTS TOMATOES)
> (car '((peas carrots tomatoes) (pork beef chicken)))
(PEAS CARROTS TOMATOES)
> (cdr '(peas carrots tomatoes))
(CARROTS TOMATOES)
> (cdr (car '((peas carrots tomatoes) (pork beef chicken))))
(CARROTS TOMATOES)
> (cdar '((peas carrots tomatoes) (pork beef chicken)))
(CARROTS TOMATOES)

Diese Funtionen machen es einfach cons-Zellen basierte Strukturen zu bearbeiten.

progn

progn bietet die Möglichkeit in einer Abfrage mehr als eine Sache zu machen.

> (defvar *number-was-odd* nil)

> (if (oddp 5)
(progn (setf *number-was-odd* t)
'odd-number)
'even-number)

ODD-NUMBER
> *number-was-odd*
T

In diesem Fall wurden zwei Sachen abgefragt.

Schreibe einen Kommentar