TITEL: Common Lisp GESAMTEINDRUCK: 4 5 (A truly exceptional paper) 4 (Positive) 3 (Borderline) 2 (Negative) 1 (Out of scope) REVIEWER's KONFIDENZ: 4 4 (expert) 3 (high) 2 (medium) 1 (low) 0 (null) REVIEW: - kurze Zusammenfassung der Ausarbeitung Die vorliegende Ausarbeitung führt in die Grundkonzepte der Programmiersprache Common Lisp ein. Dabei wird zuerst auf die Syntax eingegangen (die speziell für Makros im folgenden Teil der Ausarbeitung wichtig ist), dann auf Funktionen/Operatoren/Makros. Es wird ebenso auf exotischere Konzepte eingegangen die Teil von Common Lisp sind wie das optionale dynamische Binding (und den Vergleich zu lexikalischem Bindung, welches CL ebenfalls unterstützt) oder das unkonventionelle Objektsystem CLOS (das ebenfalls mit üblicheren Objektsystemen verglichen wird). Zum Schluss der Ausarbeitung werden die Kern-Features nochmal rausgestellt die Common Lisp von anderen Sprachen unterscheiden. - Gesamteindruck und Kommentare zum Papier (bitte begründen!) Zuallererst fällt auf das der Abgabemonat fälschlicherweise Juni statt Mai lautet :) Die Einführung ist gelungen, zeigt gleich auf, welche Stärken (Metaprogrammierung) die Sprache bietet und warum es sich lohnt, sich mit ihr zu beschäftigen. Die Syntaxeinführung ist gut gemeint, geht auf Reader und Evaluator ein (wobei leider nicht auf Reader-Makros eingegangen wird) allerdings ist das Bild etwas undeutlich und das Beispiel mit der ungültigen S-Expression wirkt nicht sinnvoll um den Sachverhalt zu klären, was Syntax ist und was nicht. Es wäre sinnvoll gewesen die abkürzende Syntax für (quote ...) ebenfalls in das Syntax-Kapitel zu setzen. Die Einführung der Special Operators ist an sich eine gute Idee, aber Konzepte wie if oder let zu diskutieren ist ggf. etwas übertrieben. Die Erklärung von function wäre vollständiger gewesen, wenn der Fakt dass Common Lisp ein Lisp-2 ist erwähnt werden würde. Das iff-Makro demonstriert zwar Makros, man würde sich aber Gegebenfalls ein spannenderes Beispiel wünschen statt nur den Nachbau von if (zudem man in Common Lisp üblicherweise in Makros eher Quotes und Escapes nutzt statt die Listen mittels list zusammenzusetzen -- dies wäre aber womöglich für den Leser verwirrend geworden). Die Beispiele und Vergleiche von dynamic binding und lexical binding sind gelungen, es ist immer gut zu den Features zu erläutern wozu sie gut sein könnten. Leider ist der Satz auf Seite 5 mit der überstehenden Zeile nicht so gut geklappt. Die Einführung in CLOS ist gelungen, das Method Dispatching wird ausreichend erklärt. Es ist jedoch nicht umbedingt sinnvoll Java als Beispiel für Message Passing zu bringen, da das Objektsystem von Java keine Möglichkeit vorsieht auf unbekannte "Nachrichten" zu reagieren. Erfreulich ist, dass das MOP eingeführt wird, ein Beispiel für die Anpassung wäre aber wünschenswert. Die Zusammenfassung ist nicht weiter bemerkenswert, der letzte Satz wirkt jedoch so als würde er in der Luft hängen. Als Lisp-User finde ich, dass die Ausarbeitung trotz aller (relativ unwichtiger) Kritikpunkte die Sprache Common Lisp gut wiederspiegelt. Positiv fällt auf, ich eigentlich keine fachlichen Fehler entdecken konnte. Zweifelhafte Passagen wurden in der Hyperspec nachgeschlagen und haben sich als richtig erwiesen. Von diesem Punkt aus gesehen ist die Ausarbeitung sehr gelungen.