Kurz: > Achtung: In Common Lisp hat nil zwei Bedeutungen: falsch und leere Liste. Das Fehlen eines Elements ist von nil als Wert nicht zu unterscheiden; nutze bei Hashtabellen den zweiten Rückgabewert von gethash.
Teil des Kurses Common Lisp
Kapitel 8 von 8 im Kurs Common Lisp. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
Wichtige Funktionen
| Funktion | Bedeutung |
|---|---|
car / first, cdr / rest | Kopf und Rest |
cons, list, append | Listen bauen |
mapcar, reduce, remove-if | Higher-Order |
funcall, apply | Funktionen aufrufen |
let, setf | Variablen |
defun, defmacro, lambda | Funktionen/Makros |
loop, dolist, dotimes | Schleifen |
format | Ausgabe |
gethash, make-hash-table | Hashtabellen |
defstruct, defclass | Datentypen |
(let ((tabelle '(("length" . 3) ("reverse" . 3))))
(dolist (zeile tabelle)
(format t "~10a ~a~%" (car zeile) (cdr zeile))))
(format t "~a~%" (list (type-of 1) (type-of 1/2) (type-of 1.0d0) (type-of #\a)))
(format t "~a~%" (list (equal '(1 2) '(1 2)) (eq 'a 'a) (eql 1.0 1.0) (= 1 1.0)))
(format t "~a~%" (list (string 'abc) (symbol-name 'xyz) (intern "FOO")))
(format t "~a~%" (loop for i below 5 collect (expt 2 i)))Ausgabe:
length 3
reverse 3
(BIT RATIO DOUBLE-FLOAT STANDARD-CHAR)
(T T T T)
(ABC XYZ FOO)
(1 2 4 8 16)Typische Fehler
(print (undefined-funktion 1))Fehlermeldung:
The function COMMON-LISP-USER::UNDEFINED-FUNKTION is undefined.(print (+ 1 "2"))Fehlermeldung:
The value
"2"
is not of type
NUMBERAchtung
In Common Lisp hat
nilzwei Bedeutungen: falsch und leere Liste. Das Fehlen eines Elements ist vonnilals Wert nicht zu unterscheiden; nutze bei Hashtabellen den zweiten Rückgabewert vongethash.
Weiterführende Quellen
- „Practical Common Lisp“ (Peter Seibel, kostenlos online)
- „Common Lisp the Language“ und die HyperSpec (lispworks.com/documentation/HyperSpec)
- „Land of Lisp“ und „On Lisp“ (Paul Graham)
- lispcookbook.github.io/cl-cookbook
Merke
- Lisp: Code ist Daten, Makros erweitern die Sprache, die REPL treibt die Entwicklung
- CLOS, das Condition-System und der Compiler machen Common Lisp zu einer vollwertigen Industriesprache
Übungsaufgabe
Schreibe ein Makro mit-zaehler, das Aufrufe einer Funktion zählt.
Quiz zur Selbstkontrolle
Was liefert (car '(1 2 3))?
- 1 (richtig)
- (2 3)
- 3
- nil
Welche Notation nutzt Lisp?
- Präfix mit Klammern (S-Ausdrücke) (richtig)
- Infix
- Postfix
- Einrückung
Wofür steht REPL?
- Read-Eval-Print-Loop (richtig)
- Rapid Evaluate Program Language
- Remote Edit Panel
- Rule Engine
Weiter im Kurs
Zurück: Ökosystem und Werkzeuge
Alle Kapitel: Common Lisp im Überblick