• [^] # u

    Posté par . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 3.

    Je ne comprends pas ta remarque. Oui, les patterns Erlang font du pattern matching. Ce que je dis c'est que dans un patten, les *variables*, quand elles existent déjà dans l'environnement, matchent leur entrée si et seulement si l'entrée fournie est égale à leur variable dans l'environnement.

    On peut ainsi définir l'égalité ainsi :
    Eq = fun(X,Y) ->
    case Y of
    X -> true;
    _ -> false
    end
    end.


    Ça marche aussi quand les variables sont déjà définies par le pattern :
    Eq2 = fun(X,Y) ->
    case {X,Y} of
    {Z,Z} -> true;
    _ -> false
    end
    end.



    (Je pense que tu le sais et que notre incompréhension est juste due à une question de formulation, mais histoire de mettre les choses à plat : )
    Un motif fait à la fois un "filtrage" (j'accepte certaines entrées et j'en rejette d'autres), et a un effet sur l'environnement (si j'accepte, j'enrichis l'environnement avec de nouvelles variables liées). La sémantique du motif qui n'est qu'une variable (les motifs plus compliqués comme ceux sur les tuples étant défini par composition des sémantiques des sous-motifs qui les composent) est :
    - si la variable n'existe pas dans l'environnement, accepter toujours et enrichir l'environnement avec un lien (variable -> entrée)
    - si la variable existe déjà dans l'environnement, accepter seulement si l'entrée est égale à sa valeur dans l'environnement, et ne pas enrichir l'environnement