Errori noti in Linguaggi di programmazione: principi e paradigmi, prima edizione
-
pag. 2, Figura 1.1: vedi la figura corretta.
-
pag. 14, Riquadro "Funzioni parziali"
linea 8: "un corrispondente elemento in b" Correggi: "un corrispondente elemento in B"
ultima riga: errata f(n); corretta f(x)
-
pag. 15, equazione (1.3): le due occorrenze di D devono essere Input.
-
pag. 33, riga -10: errata ⇒1; corretta: ⇒10
riga -9, errata: la produzione (1); corretta: la produzione (10).
-
pagg. 51ss, Figure 2.12 e 2.13. tutte le regole che hanno una premessa del tipo
<Exp, σ> → <Exp', σ> devono intendersi applicabili anche quando la premessa
è della forma <Exp, σ> → Exp' (vedi la nota 1, qui sotto).
-
Pag. 89, riga 6,7,15 funzioni fie e foo, corretta fie(), foo();
-
Pag. 110, linea -6 (ultima istruzione Esempio 5.3): errata write(x), corretta write(y).
-
pag. 112, linea -9: invece di "il RdA del chiamato si deve trovare già sulla pila"
deve essere: "il RdA di tale blocco esterno si deve trovare già sulla pila".
-
pag. 119, linea -1: invece di "ambiente locale di A" deve essere "ambiente locale di B".
-
pag. 120, Figura 5.20: la casella in basso a destra deve contenere (w, γ2) invece di (w, δ1):
vedi la figura corretta.
-
pag.129, riga -7: errata (x=5); corretta: (y=5).
- pag. 139, linea 19: invece di: "calcola innanzitutto lo l-valore", correggi: "calcola lo l-valore"
linea 20: invece di: "calcola quindi lo r-valore", correggi: "calcola lo r-valore" (vedi la nota 2, qui sotto).
-
pag. 140, linee 20 e 21: "assegnare il valore di a[1]+1 ad a[2]" aggiungi: "qualora la valutazione del membro
destro dell'assegnamento preceda la valutazione del membro sinistro".
-
pag. 149, Figura 6.3: si assume che le etichette (Label 1), ..., (Label n)
siano le costanti consecutive 0, 1, ..., n-1; inoltre Jump L0+v deve essere
Jump L0+v*k, dove k è il numero di byte di un'istruzione Jump Li. Vedi
la figura corretta.
-
Pag. 156, linea 5: nel for la terza occorrenza dell'indice
deve essere maiuscola (errata: i =+ passo; corretto: I =+ passo)
-
p. 177 fig 7.4: sostituire i puntini ... con y=0;
-
Pag. 177, linea -16: il riferimento alla definizione di l-valore è a pagina 139 (e non 138).
p. 177 fig 7.4: sostituire i puntini ... con y=0;
-
Pag. 183, Fig. 7.10, nel codice, errata "int a = foo(", corretta "int a = fie(";
-
pag. 187, Figura 7.13: la linea 5 deve essere: int g(int h(int n)){
-
pag. 189, Figura 7.14: nel secondo RdA dall'alto il puntatore cs è superfluo (perché riferito
ad un blocco in-line): vedi la figura corretta.
-
pag. 191, Figura 7.16: la freccia che origina dalla seconda componente della chiusura per fie deve puntare
al primo (dall'alto) RdA di foo: vedi la figura corretta.
-
pag. 193, Figura 7.17: aggiungi } come ultima riga.
-
pag. 205 esercizio 9: else if(x==1) throws X correggi in else if(x==1) throw X
-
Pag. 221, linea 16, errata "4 parole", corretta "6 parole";
-
pag. 224, righe 2, 3 e 4 (codice); sostituisci con:
s.campivarianti.ultimoanno = 2001;
if (s.fuoricorso) printf("%d", s.campivarianti.ultimoanno);
else printf("%d", s.campivarianti.stud_in_corso.anno);
-
Pag. 277, riga 20, errata "linee da 3 a 6", corretta "linee da 7 a 12".
-
Pag. 278, Fig 9.2: prima della linea 31, inserire if (s.n == 0) errore;
-
pag. 292, riga -7: errata "campo c", corretta "campo x".
-
pag. 308, linea -4: invece di new Counter() deve essere new NewCounter().
-
pag. 311, linea -13: invece di A ogg_a = (A) b; deve essere A ogg_a = (A) ogg_b;
linea -15, invece di ogg_b.f deve essere ogg_b.f()
linea -12, invece di ogg_a.f deve essere ogg_a.f()
-
Pag.315, figura 10.7, riga -2, errato A aa = b;, corretto A aa = pb;
-
Pag. 333, linea -12: errato lf = , corretto cf =
linea -11: errato lf, corretto cf
-
Pag. 354, Teorema 11.2: L'enunciato corretto è: Sia exp un'espressione chiusa. Se exp si riduce ad un valore primitivo val usando
una qualsiasi delle tre strategie del paragrafo precedente, allora exp si riduce a val
seguendo la strategia per nome.
Se exp diverge usando
la strategia per nome, allora diverge anche con le altre due strategie.
-
pag. 360, linea -9: errato numeriDan n; corretto (numeriDan n)
-
pag. 365, Figura 13.1: la linea 11 (intestazione compresa) - (quella dove C risulta [(fn y => (succ x)), x, @,@] ): il numero della regola applicata
(ultimo carattere della riga) dovrebbe essere 3 e non 1.
-
pag. 389, linea 6: invece di {X/Y, W/Z} deve essere {X/W, W/X}
Refusi tipografici che non compromettono la comprensione del testo:
-
Pag. 3, riga 15, errara "un macchina", corretto "una macchina";
-
Pag. 8, riga -17, errara "livello di", corretto "livelli di";
-
Pag. 14, riga 3, parola 4, errata "ad", corretta "per";
riga 14 e 15: manca un ``;'' al termine
-
Pag. 10, riga 16, parola 2, errata "sono", corretta "solo";
-
Pag. 21, riga -7, parola -4, errata "micropogrammato", corretta "microprogrammato";
-
Pag. 24, riga 6, parola -4, errata "degl'input", corretta "dell'input";
-
Pag. 27, riga 7, parola -4, errata "addentrarci", corretta "addentrarsi";
-
Pag. 41, riga -5, parola -2, errata "un", corretta "una";
-
Pag. 47, riga 3, errata "ottimizzazione", corretta "ottimizzazioni";
-
Pag. 56, riga 20, parola 3, errata "un", corretta "una";
-
Pag. 63, riga -11, errata "in punto", corretta "un punto";
-
pag. 75, Figura 4.2:
write(d) e write(e) mancano del ; finale.
-
Pag. 93, riga 8, parola 3, errata "dedicata", corretta "dedicato";
-
Pag. 97, didascalia della Fig. 5.3, errata "attivazione i blocchi", corretta "attivazione per i blocchi";
-
Pag. 104, riga 19, errata "deallocazione", corretto "Deallocazione";
-
pag. 105, linea -8: errata "fissa abbastanza limitata.", corretta "fissa abbastanza limitata,";
linea -12: errata "memoria sia", corretto: "memoria siano";
-
Pag. 109, riga 5, errata "ed gli heap", corretto "e gli heap";
-
Pag.113, riga 24, parola 7, errata "dove", corretta "dover"
-
Pag. 117, didascalia della Fig. 5.17, errata "per i blocco", corretta "per il blocco";
-
Pag.120, riga -16, parola 3, errato "la", corretto "le";
-
Pag. 130, riga 11, parola -7, errata "(cioè", corretta ", cioè";
riga -9, parola -4, errata "in modo modo", corretta "in modo";
-
Pag. 135, riga 7, errato il font della seconda coppia di apici dopo il || (vedi "...in C "||"...");
-
Pag. 136, riga -21, parola -3, errata "che sono sono", corretta "che sono";
-
Pag. 138, riga -16, parola 2, errata "una", corretta "un";
-
pag. 142, in alto: i due assegnamenti devono essere espressi con = e non con :=
-
pag. 143, riga 10, errata "la la memoria", corretta "la memoria";
-
Pag.147, riga -5, dopo parola 9, aggiungere "per" ("per indicare...");
-
Pag. 150, riga -3, errata "a verificarsi", corretto "al verificarsi";
-
Pag. 152, riga 23, parola 2, errata "valuate", corretta "valutate";
riga 15: "di di un tipo", corretta "di un tipo";
-
Pag. 154, nota: "definibile" corretta "definibili";
-
Pag. 165, riga -1, parola 4, errata "f non è ha", corretta "f non ha";
-
Pag. 166, riga -5, parola 5, errata "restituisce in l'n-esimo", corretta "restituisce l'n-esimo";
-
Pag.169, riga -11, parola 1, errata "La", corretta "Si";
-
Pag. 175, riga -11, parola 3, errata "quando permetta", corretta "quando permette";
-
Pag 187, penultima riga , manca la parentesi di chiusura " ) " prima del punto-e-virgola.
-
Pag. 197, riga -13, parola 6, errata "fino a quanto", corretta "fino a quando";
-
Pag. 201, riga -9, parola -9, errata "essendo un classe", corretta "essendo una classe";
-
Pag. 202, riga -6, parola 4, errata "assicurato", corretta "assicurata";
-
Pag. 207, riga 10, errata: "definirne", corretta "per definirne";
-
Pag. 212, riga 4, parola 6, errata "come un", corretta "come una";
-
Pag. 216, riga -14, parola 4, errata "in un quattro", corretta "in quattro";
-
Pag 246, linea 13: "::" corretta ":"
-
Pag. 255, riga 4: errata "è pagata" corretta "sono pagate";
riga -17, parola 4, errata "del", corretta "dal";
-
Pag. 270, riga -7, parola -1, errata "gget-", corretta "ogget-";
-
Pag.280, riga 18, parola 3, errato "di delle pile", corretto "delle pile";
-
pag 305, riga 1 della nota, errata "una" corretta "un".
-
pag 308, Fig. 10.4: "top" e "bottom" devono essere maiuscoli;
-
Pag. 331, linea 21: errata "quelli di metodi", corretta: "quelle di metodi"
-
Pag. 335, linea -2: errata "un stringa" corretta "una stringa";
-
Pag. 343, linea -13: errata "teorica" corretta "teorico";
-
Pag. 346, linea -11: aggiungi ";" al termine;
linea -7: errata "sui primi", corretta "suoi primi";
-
Pag. 347, nota: errata "tutta la prossimo", corretta: "tutto il prossimo";
-
pag. 349, linea -10: errata "nella prossimo paragrafo", corretta: "nel prossimo paragrafo";
-
pag. 351, nota: errata "un causa", corretta: "in causa";
-
pag. 361, linea 8: errata "esso contenuti", corretta: "esso contenuto";
-
pag. 365, Figura 13.1: la linea 11 (intestazione compresa) - (quella dove C risulta [(fn y => (succ x)), x, @,@] ): il numero della regola applicata
(ultimo carattere della riga) dovrebbe essere 3 e non 1.
-
pag. 368, linea 9: errata "un'insieme", corretta: "un insieme";
-
pag. 381, linea -11: "da pagare" è ripetuto due volte.
-
pag. 391, linea -12: "vice versa" -> "viceversa".
-
pag.436, riga 12, parola 2: virgoletta inutile prima di 'che;
Note alle correzioni
Nota 1
La configurazione Exp' può essere considerata un caso particolare della configurazione <Exp', σ>,
che si ottiene omettendo lo stato. A voler essere rigorosi dunque tutte le regole di questo tipo dovrebbero essere considerate duplicate, con entrambi i tipi di premessa.
A titolo di chiarezza espositiva notiamo che diverso è il caso delle regole (nella Figura 2.14) che hanno premesse della forma
<Com, σ> → <Com', σ>, dove Com è un comando.
In questo caso infatti la configurazione <Com', σ> ha un significato diverso da quello del solo stato
σ presente nelle regole terminali e dunque i due tipi di premesse sono
da considerarsi diversi.
Infine osserviamo che la seconda regola di valutazione della differenza nelle espressioni aritmetiche introduce un non determinismo nella valutazione che può
disturbare (e certamente non corrisponde al caso dei linguaggi reali). Per eliminare tale non determinismo basta eliminare tale regola.
Nota 2
Alcuni linguaggi (p.e. Java) prevedono che il membro sinistro sia valutato prima del membro destro;
altri (p.e. C) lasciano questa decisione all'implementazione.
Hanno segnalato errori: Matteo Bertoni, Irene Borra, Vittorio Cantatore, Marco Comini, Michele Filannino, Matteo Friscini, Stefano Gardenghi, Guido Guizzunti, Giacomo Magisano,
Flavio Marchi, Fabrizio Massei, Maurizio Molle, Mirko Orlandelli, Marco Pedicini,
Remo Petrocelli, Tonino Petrulli,
Andrea Rappini, Andrea Regoli,
Fabiano Ridolfi, Giovanni Rosignoli, Giampiero Travaglini, Fabrizio Giuseppe Ventola.
Ultima modifica: 23 maggio 2012.