ISBN papier : 9781784057015 ISBN ebook : 9781784067014 |
ISBN papier : 9781784057022 ISBN ebook :9781784067021 |
• Page 51, dernière ligne :
« F = <x, e, (F, Env) + f> »
Devrait être « F = <x, e, (f, F) + Env> »
• Page 69, proposition 3.1 :
Il manque la conclusion « => v = v' » dans l'énoncé de la proposition
de déterminisme.
• Page 125, dernier paragraphe avant 4.7.1.2 :
« En ordonnant l'ensemble des fonctions partielles de Mem dans Mem
»
Devrait être « de M dans M »
• Page 140 :
« Toutefois, lorsque nous avons introduit les expressions du langage
(en particulier l’application, voir section 3.1.1) puis la fonction
d’évaluation (voir section 3.2.1)... »
La fonction d'évaluation est décrite en section 3.2 et non 3.2.1.
• Page 148, sous le tableau 5.1 :
« »
Devrait être «
»
• Page162, fonction unify
:
Le cas unifiant deux variables identiques ne doit pas provoquer d'occur-check
mais doit retourner la substitution vide.
(Merci à Atoli Huppé de m'avoir fait découvrir l'erreur).
let rec unify t1 t2 =
if t1 = t2 then empty_subst
else
match (t1, t2) with
| (T_fun (a, b), T_fun (c, d)) ->
let subst_left = unify a c in
let b_substed = apply b
subst_left in
let d_substed = apply d
subst_left in
compose (unify b_substed
d_substed) subst_left
| (T_var v, other) | (other, T_var v) ->
if occur_check v other then
raise Cycle ;
singleton v other
| _ -> raise (Incompatible_tys (t1, t2))
def unify (ty1, ty2) :
if (isinstance (ty1, type.T_int) and isinstance (ty2,
type.T_int)) or\
(isinstance (ty1, type.T_bool) and
isinstance (ty2, type.T_bool)) :
return subst.empty
elif isinstance (ty1, type.T_fun) and isinstance
(ty2, type.T_fun) :
a, b, c, d = ty1.t1, ty1.t2,
ty2.t1, ty2.t2
subst_left = unify (a, c)
b_substed = subst.apply (b,
subst_left)
d_substed = subst.apply (d,
subst_left)
return subst.compose (unify
(b_substed, d_substed), subst_left)
elif isinstance (ty1, type.T_var) or isinstance (ty2,
type.T_var) :
(other, v) = (ty1, ty2.vname)
if isinstance (ty2, type.T_var) \
else
(ty2, ty1.vname)
if other
!= v and occur_check (v, other) :
raise
Cycle
return subst.singleton (v,
other)
else :
raise Incompatible_tys (ty1,
ty2)
• Page 163, dernière ligne des explications d'implantation :
« où l’inversion de la variable mise... »
Devrait être « d'où l’inversion... »
• Page 181 première phrase :
« 3+4 » serait plus aéré sous la forme « 3 + 4
»
• Page 193, exemple 6.12 :
La ligne
printf ("fl3 ~ fl4 ? %d\n", (fabs (fl3 - fl4) <
EPSILON)) ;
ne devrait pas figurer dans le code car elle n'est pas affichée dans le
résultat et ne sert pas à l'explication qui suit.
• Page 198, fin du premier paragraphe :
« Il s'agit du caractère de valeur 0 noté '\O'. »
Devrait être « ... noté '\0' ».
• Page 211, exemple 6.39 :
La fonction donnée en exemple s'appelle « inserse » au lieu de «
inverse ».
• Page 224, exemple 6.54 :
« /* Comparaison d'égalité dentre deux tableaux »
Devrait être « /* Vérification d'égalité entre deux tableaux »
« La taille des tableaux »
Devrait être « Les tailles des tableaux »
• Page 5, fin du premier paragraphe :
« odélisation »
Devrait être « modélisation ».
• Page 13, avant-dernier paragraphe :
« Une liaison sera donc désormais un n-uplet (identificateur,
information1, information2,
etc.) »
Devrait être « Une liaison sera donc désormais un n-uplet
(identificateur, information1, information2,
...) »
• Page 14, exemple 1.5 :
« type client = C of person »
Devrait être « type client = C of P.person »
• Page 15, ligne 8 :
« a été étendu avec la liaison (client, C of person)
»
Devrait être « a été étendu avec la liaison (client, C of
P.person) »
• Page 38, milieu de page, second item :
« le compilateur acceptera la définition de
seulement si est une
instance de : le
type est
alors de la forme
et , étant
trouvé par l'algorithme de typage. Par exemple, si , si ,
alors . »
Il faut inverser et
. Le texte devrait
donc être :
« le compilateur acceptera la définition de
seulement si est une
instance de : le type est alors de la
forme
et
, étant trouvé
par l'algorithme de typage. Par exemple, si
, si
,
alors
. »
• Page 72, lignes 4 et 5 du listing en haut de la page :
« ... (7, mes.listes.cons (9, l))) ; »
Devrait être « ... (7, mes_listes.cons (9, l))) ; »
« ... ('b', tes.listes.cons ('c', c))) ; »
Devrait être « ... ('b', tes_listes.cons ('c', c))) ; »
• Page 76, code suivant 2.2.2 :
« (* Declarations. *) »
Devrait être « (* Déclarations. *) »
• Page 80, avant 2.2.2.3 :
« ... elle-même masquée par (x, ‘‘bonjour’’). »
Devrait être « ... elle-même masquée par (x, "bonjour"). »
• Page 82, second paragraphe :
« L' exemple 2.21... »
Devrait être « L'exemple 2.21... »
• Page 83, second paragraphe :
« retournant une valeur de type elem. : »
Devrait être « retournant une valeur de type elem. »
• Page 84, exemple 2.23 :
L'exception « Error » n'est pas définie dans le module « NewL3
». Soit il faut l'y rajouter, soit la définir à toplevel.
• Page 86, premier paragraphe :
« ... voir l'égalité de fonctions dans la section 6.6. »
Devrait être « ... voir l'égalité de fonctions dans la section 6.6 du
tome 1. »
• Page 87, fin du second paragraphe :
« ... une liste ordonnée liste1 contenant des
caractères. »
Devrait être « ... une liste ordonnée liste1
contenant des chaînes de caractères. »
• Page 90, fin du second paragraphe :
« ... se fait en utilisant la directive #include ‘‘name.h’’...
»
Devrait être « ... se fait en utilisant la directive #include
"name.h"... »
• Page 91, fin du second paragraphe :
« Le fonction... »
Devrait être « La fonction... »
• Page 92, début de page :
« Avec l'exemple 2.31, nous joutons la directive #include
fessai.h . »
Devrait être « Avec l'exemple 2.31, nous ajoutons la directive #include
"fessai.h". »
• Page 93, avant dernier paragraphe :
« ... doit figurer dans tous les fichiers F_j qui souhaitent
l'utiliser... »
Devrait être « ... doit figurer dans tous les fichiers F_i qui
souhaitent l'utiliser... »
• Page 93, dernier paragraphe :
« Ce mot-clé extern indique au compilateur que
l'allocation mémoire de var doit être faite une seule fois, donc
partagée par tous les fichiers F_i utilisant var. »
Cette explication s'appuie sur des non-dits. Nous proposons de la
remplacer par : « Ce mot-clé extern indique au
compilateur une déclaration et non une définition de variable. Il n'y a
à ce point aucune allocation. Une allocation sera faite lors de l'unique
(et nécessaire) définition de var. Cette unique allocation mémoire sera
donc partagée par tous les fichiers F_i utilisant var. »
• Page 94, lignes 3 et 5 du paragraphe :
« #include ‘‘file.h’’ »
Devraient être « #include "file.h" »
• Page 132, affichage des résultats de l'exemple 4.3 :
« appel implicite du constructeur C () pour la création de a_D »
Devrait être « pour la création de b_D »
• Page 133, paragraphe avant l'exemple 4.4 :
« ... une méthode voir qui prend un argument de type
void »
Devrait être « ... une méthode voir qui ne prend pas
d'argument »
• Page 135, premier item de la section 4.1.4.2 :
« - abstract]l »
Devrait être « -abstract : l »
• Page 143, dernière phrase :
« si et seulement »
Devrait être « si et seulement si »
• Page 148, dernière phrase :
« Neutralisons la fonction main dans l’exemple 4.15 »
Devrait être « Neutralisons l'appel P::f () ; dans
la fonction main dans l’exemple 4.15 »
• Page 149 :
« La différence de comportement entre les différentes utilisations de
#include sont liées... »
Devrait être « ... est liée ... »
• Page 155, fin du premier paragraphe :
« Ces objets sont désalloués à la fin de cette exécution. »
Ce n'est le cas que pour oloc. L'objet pointé par ploc
étant alloué dynamiquement, il survit à la fin de f.
• Page 156, fin du premier paragraphe :
« détruite lorsque l'exécution de g sera terminée »
Devrait être « lorsque l'exécution de la fonction sera terminée ».
Il n'y a pas de fonction g dans l'exemple et cette
explication est valable quelle que soit la fonction qui a défini la
variable locale.
• Page 156, milieu du second paragraphe :
« Dans l'exemple 4.21, le pointeur p est créé sur le
tas... »
L'explication est erronée : p étant une variable locale, elle
est allouée sur la pile (ou dans un registre). La mémoire allouée pour
l'objet lui-même l'est dans le tas.
• Page 158, messages d'erreur de la compilation :
Les commentaires sont incorrects dans les deux citations du code par le
compilateur. Ils devraient être en accord avec le code source.
• Page 174, avant dernier paragraphe avant la section 4.2.5.3 :
« ... des paramètres du template,: int ... »
Devrait être « ... des paramètres du template : int
... »
• Page 176, fin de second paragraphe :
« est compilée puis exécutée et ajoutée au fichier en cours de
construction »
Devrait être « ajouté au programme courant ». En effet, en
utilisation interactive, il n'y a pas de fichier sous-jacent.
• Page 180, premier paragraphe :
« Dans cet exemple, le type des paramètres formels... »
Devrait être « Dans cet exemple, les types des paramètres formels...
»
• Page 182, dernier paragraphe :
« Le seules occurrences »
Devrait être « Les seules occurrences »
• Page 198, dernière phrase :
« ... il suffit d'importer le module contenant le compilateur py_compile...
»
Devrait être « ... il suffit d'importer le module py_compile...
»
• Page 199, première phrase :
« Le résultat est un fichier de bytecode, nommé (fichier .pyc). »
Devrait être « Le résultat est un fichier de bytecode (fichier .pyc).
»
• Page 199, code de compilation du script :
« >>> py_compile.compile ('calculette1.py') »
Devrait être « >>> py_compile.compile ('calculette.py')
»
• Page 203, première ligne :
« ... si ce paramètre est mutable. »
Devrait être « ... si ce paramètre a une valeur mutable. »
• Page 209, premier item d'énumération :
« 1) en-tête de la liste... »
Devrait être « 1) en tête de la liste... »
• Page 210, seconde phrase :
« Dans la partie 4, l'expression... »
Devrait être « Dans la partie 3, l'expression... »
• Page 210, milieu avant-dernier paragraphe :
« Celle-ci crée la liaison (y, 5) en-tête de... »
Devrait être « Celle-ci crée la liaison (y, 5) en tête de... »
• Page 214, introduction de l'exemple 4.83 :
« Dans l'exemple 4.83, la classe Personne
surcharge... »
Devrait être « Dans l'exemple 4.83, la classe Person
surcharge... »
• Page 217, exemple 4.86 :
L'exécution du dernier for ne provoque qu'un seul affichage de «
dans C 1 ».