dans Prolog, nous pouvons faire quelque chose comme ce qui suit: ceci est, lorsque le 1er argument de 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. P> p> mycoscincifonction code> est identique au premier élément du Liste qui est dans la 2e argument, cette fonction évaluera à
... code>. p>
3 Réponses :
Haskell ne fait pas ce genre de "correspondance variable". Vous devrez explicitement mettre un garde sur:
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:
haskell ne fait pas l'unification em> 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. P>
blockQuote> Vous pouvez bien sûr nommer les variables et indiquer qu'ils doivent également être égaux: p> intéressant, AGDA permet de contourner les informations sur les modèles Comme cela, et introduit une notation spéciale
fx (.x: _) code> pour dire que ce
x code> doit être que
x p>. P> p>
Dans SCALA, vous pouvez utiliser x code> pour désigner un motif qui correspond à la valeur d'une variable comme l'affaire AGDA.