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.