9
votes

Motif correspondant aux variables équivalentes dans HASKELLL, comme dans Prolog

dans Prolog, nous pouvons faire quelque chose comme ce qui suit: xxx

ceci est, lorsque le 1er argument de mycoscincifonction est identique au premier élément du Liste qui est dans la 2e argument, cette fonction évaluera à ... .

Ma question maintenant est ... Comment accomplir une chose similaire à Haskell? J'ai l'idée que la correspondance du modèle de Prolog est plus expressive que celle de Haskell. J'essaie de coder que dans Haskell et que j'ai des problèmes - que je n'utilise pas la syntaxe non valide ou que le tour ci-dessus ne fera tout simplement pas.


0 commentaires

3 Réponses :


13
votes

Haskell ne fait pas ce genre de "correspondance variable". Vous devrez explicitement mettre un garde sur: xxx


0 commentaires

8
votes

in Haskell, vous ne pouvez pas faire de comparaisons implicites comme celle-ci dans une correspondance de motif. Au lieu de cela, vous devrez ajouter un garde qui fait explicitement la comparaison, comme: xxx


0 commentaires

12
votes

haskell ne fait pas l'unification de variables, comme le fait prolog. Comme le Signaler Haskell 98 dit,

L'ensemble de motifs correspondant à chaque correspondance doit être linéaire - - Aucune variable n'est autorisée à apparaître plus d'une fois dans l'ensemble de l'ensemble.

Vous pouvez bien sûr nommer les variables et indiquer qu'ils doivent également être égaux: xxx


intéressant, AGDA permet de contourner les informations sur les modèles Comme cela, et introduit une notation spéciale fx (.x: _) pour dire que ce x doit être que x .


1 commentaires

Dans SCALA, vous pouvez utiliser x pour désigner un motif qui correspond à la valeur d'une variable comme l'affaire AGDA.