UP | HOME

Errata in "Funktionale Programmierung und Metaprogrammierung – Interaktiv in Common Lisp"

1 Fehler

Zum Glück sind die meisten Fehler gegenstandslos, also Satzfehler, sogenannte typos oder als Fehler unmittelbar aus dem Zusammenhang erkennbar. Darum habe ich *die fünf wichtigen Fehler in einer gesonderten Tabelle 1.1 aufgeführt.

Die Numerierung (lfd.Nr.) der Fehler erfolgt nach dem Zeitpunkt ihrer Entdeckung und ist darum nicht chronologisch zum Buch.

1.1 Wichtige Fehler

Seite lfd.Nr. Abschnitt Position falsch richtig
111 6 8.2.3 unten REVERSE-LIST hängt zwei Listen aneinander REVERSE-LIST invertiert eine Liste
187 9 13.4 Fußnote DEFINITION NOT FOUND Man gelangt in der Kategorientheorie von einem Begriff zu seinem dualen Begriff grob gesagt dadurch, dass man im kommuntativen Diagramm alle Pfeile umdreht.
374 14 8.4   die Lösung ist falsch. Siehe unten.  
71 19 5.2 mitte \(s=10m\) \(t=10s\)
333 29 19.2 oben können beliebige Cross Cutting Concerns können beliebige Cross Cutting Concerns bedient werden.

1.2 Richtige Lösung zu Aufgabe 8.4

Die von mir im Buch präsentierte Lösung ist nicht korrekt. Folgende Lösung ist richtig:

(defun tpower (x n)
  (labels ((pow (n k acc)
             (if (= 0 n)
                 acc
                 (if (evenp n)
                     (pow (/ n 2)      (* k k) acc)
                     (pow (/ (1- n) 2) (* k k) (* k acc))))))
    (pow n x 1)))

1.3 Sonstige Fehler

Seite lfd.Nr. Abschnitt Position falsch richtig
12 15 2.5 unten Strg-x Strg-o Strg-x o
25 16 3.2 Themenbox Esc p= Esc p
31 17 3.2.1 unten \([x_1,x_2,x_3,...xn]\) \([x_1,x_2,x_3,...x_n]\)
55 18 Zusammenfassung Ende handelt diese Kapitel handelt dieses Kapitel
61 1 4.3   eingebauxte eingebaute
68 2 5.3 mitte geschieht das mit eq geschieht das mit eql
75 23 Zusammenfassung mitte die mit Funktionen wie Datenobjekten arbeiten die mit Funktionen wie mit Datenobjekten arbeiten
76 3 6 oben Onlisp Der Autor selbst hat "CamelCase" verwendet, also heisst es "OnLisp"
71 20 5.2 mitte \(g_{earth}=9.81\frac{m}{s}\) \(g_{earth}=9.81\frac{m}{s^2}\)
90 4 6.4 oben WEIxE NEBEL WEISSE NEBEL
93 5 6.6 mitte iteration Iteration
94 22 Aufgabe 6.5 mitte um aus der Funktion u* eine Funktion p* zu konstruieren um aus der Funktion *u eine Funktion *p zu konstruieren
102 24 7.3 mitte Funktionsdef.: Der Apostroph sollte in Zeile 2 stehen  
116 25 8.3 unten Die Definition sagt aus, das Die Definition sagt aus, dass
120 7 8.6 oben schreiben Sie die Funktion power(x n) schreiben Sie die Funktion tpower(x n)
133 31 Tab. 10.4 unten Reihe mit vier X / 20 / 99 Reihe mit drei X / 15 / 99
133 31 Tab. 10.4 unten Reihe mit drei X / 15 / 1000000 Reihe mit vier X / 20 / 1000000
135 32 10.4 unten innere Schleife (dolist (i (car phase)) durchläuft innere Schleife (dolist (start (car phase)) durchläuft
137 34 10.4 mitte   vor das Blitzsymbol gehört ein Zeilenumbruch
137 33 10.4 unten vorstellet vorgestellt
176 8 13.1 Fußnote Rasiert dieser Barbier sich selbst¿ rasiert der Barbier von Sevilla sich selbst?
237 10 14.2.4 oben einer Variablen lnp zu einer Variablen nlp zu
267 11 16.1 Themenbox Ergebnis 30, denn 10 + 1 ⋅ 10 + 30 = 30 Ergebnis 21, denn 10 + 1 ⋅ 10 + 1 = 21
289 12 17.1 oben (if (y-or-n-p "another one?") (my-repl)) (if (y-or-n-p "another one?") (my-listener))
321 13 19.11 Abb 19.1 integer-range-set und set-by-extension sind vertauscht. -
322 26 19.1   enumerateable-set ist kein korrektes Englisch richtiges Englisch ist enumerable-set
329 27 19.2 unten ist die Klassendefinition ist ihrerseits ist die Klassendefinition ihrerseits
331 28 19.2 oben Implemmentierung Implementierung
333 30 19.2 oben Architekt das Common Lisp Object Systems Architekt des Common Lisp Object Systems

2 Verbesserungsmöglichkeiten

2.1 Funktionsdefinition tag-query

Seite 97. Anstatt (not (set-difference kann man kürzer subsetp verwenden:

(defun tag-query (tags)
  (mapcan (lambda (item)
            (when (subsetp  (car item) tags)
              (list (list (set-difference (car item) tags)
                          (cadr item)))))
          *tag-db*))

2.2 Funktionsdefinition reverse-list

Seite 112. Die Laufzeit des Codes ist \(O(n^2)\). Deswegen ist die Definition nicht falsch, aber verbesserbar. Nehmen Sie es als zusätzliche Übung, O(n) daraus zu machen! :-)

2.3 Funktionsdefinitionen LIST-COPY, MAP-CAR und ZIP

Seiten 110-111. Die jeweils 2. Zeile ist nicht vernünftig eingerückt.

Autor: Patrick M. Krusenotto

Datum: 15.12.2019

Generiert mit Emacs 26.3 (Org mode 9.1.9)

comments powered by Disqus