|  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 ».