LINKÖPINGS UNIVERSITET
Institutionen för datavetenskap              2009-10-29
Anders Haraldsson

Rättelser till läroboken Haraldsson, Programmering i Lisp, tryckning 2003 och senare.

sida  rad
 20   -3   I fotnoten. Skall stå funktionell programmering.
 29   +10  I rutan för case-satsen. Sista raden har en högerparentes för 
           mycket.
           Skall vara "(otherwise uttryck))"
 30	   Övning 2.8.E. I samband med millenieskiftet ändrade jag på
           några övningar, som fick en del konsekvenser som vi i andra
	   övningar ej tog hänsyn till. Tidigare räknade vi bara med
           årtal under 1900-talet. Om vi generaliserar och tar
           godtyckliga årtal från år 0 behöver vi göra en del ändringar.
	   Se lämpligen följande fil med ny kod.   
 44   -5   Funktionen sqrt-newton returnerar ett bråk och därför 
           konverteras bråket till ett flyttal med float för att få
           ett värde som man kan förstå. Eftersom all aritmetik 
           ändå görs exakt som stora tal och bråk blir det ineffektivt. 
           Bättre är att flytta konverteringen till funktionen average 
           där divisionen utförs. På sida 45 +6 ersätt "(/ (+ x y) 2))" 
           med "(float (/ (+ x y) 2)))" eller "(/ (+ x y) 2.0)".
 57   +2   Avslutas med en parentes för mycket. Skall vara ...(list 1 2))
120   -7   Står "... den skapa funktionen" skall vara "... den skapade 
           funktionen"
141   -9   (figuren) Det står UT skall var OUT
151   +15  I deriv så saknas fallet med att uttrycket kan vara ett tal, dvs konstant.
           Derivatan av en konstant är 0.
	   Lägg in ett fall efter "((symbolp expr) 0)"
	   "((numberp expr) 0)"
151   -11  Saknas en högerparentes i slutet av raden. Skall sluta "... (caddr expr))))"
194   +8   "... en flerdimensionell arraystrukturen ...." skall vara 
           "... en flerdimensionell arraystruktur ..."
199   +11  Se övning 12.7.D skall vara se Se övning 12.7.C.
200   +8   Skall vara 1+ istället för +1, samt att det saknas en högerparentes i slutet 
           av raden.
210   -12  Raden skall avslutas med ytterligare två ), dvs ".. (december . 11))))"
211   +7   Anropet till konstruktorfunktionen make-klockslag måste här göras med
           nyckelord, dvs "(make-klockslag :tim tim :min min)"
           Ett alternativt är att deklarera posttypen (structure) som en
           BOA-constructor (se sid 206) genom 
           "(defstruct (klockslag (:constructor make-klockslag (tim min))))"
230   -4   Hänvisningen till avsnitt 11.2.2 skall vara 11.1.2.
230   -2   Det står "Definiera funktionen ex-sort från avsnitt 11.2.4." 
           Det skall vara "Definiera funktionen seelction-sort från avsnitt 
	   11.1.4." 
246   +2   Står "with-open-fil". Skall vara "with-open-file".
254   +8   Exemplet skall vara 
           (read-from-string " (a b c) kalle 25 " nil 'end-of-string :start 8)
	   Man måste ange värden på optionalparametrarna (för hantering av fel
	   om man kommer till slutet av strängen) innan man anger 
	   nyckelordsparametern :start som anger var i strängen man skall börja
	   läsa.
283   -1   Det står tag-body, skall vara tagbody (utan bindestreck) 
329   15   I rutan för unwind-protect, 5 raden skall vara
           "uttryck har beräknats eller ett onormalt återhopp görs vid ..."
343   -6   Första och andra argumentet i substitute skall byta plats. Skall stå
           (substitute nytt-element element sekv)
368   fotnoten Hela exemplet utgår och det är felaktigt. 
392   +6   Anropet till funktionen dagar-till-månad saknar årtalet som första parameter.
           Det skall vara "(dagar-till-månad (år d) (- (månad d) 1))".
396   Övn 4.7.A. Lösning på append-exemplet saknas. 
           Efter cons-uttrycket skall stå
	     (append '(a b) '(x y)) => (a b x y)
399   +10  Det står (endp l) skall vara (endp mx)
406   +7   Funktionen all-subst. Saknas en högerparentes på rad 7. Nästföljande 3 rader är
           därför ej korrekt indenterade. De skall flyttas 3 blanksteg åt vänster.
412   +10  står (sum-loop 1 sum)))) skall vara (* h (sum-loop 1 sum)))))
415   -8   Se kommentar för motsvarande funktion på sida 151. Lägg till  fallet
           "((numberp expr) 0)"
425   -2   Saknas en parentes i slutet på raden. Skall vara "... (caddr x))))"
420   -1   Deriveringsregeln för sin är felaktig. sin'(f(x)) = f'(x)cos(f(x))
           (skapa-produkt (derivera (argument-1 uttr) var) 
                          (skapa-cos (argument-1 uttr)))
422   -11 till -8 Index går i exemplet från 1 till 4, skall vara från 0 till 3
448   -8   svaret skall vara (x (b y z) (z)), dvs sista elementet skall 
           omslutas av ett parentespar
För rättelser tack till bl a Fredrik Klasson, Mattias Aronsson, Rikard Söderström, Daniel Rönngren, 
Willy Westerberg, Anders Abel, Tord Svensson,  Anders Lindahl, Tobias Chyssler, Ulrik Lindblad,
Andreas Paulsson,  Mattias Linner, Lars Brinkhoff och Andreas Palm.