Je suis un peu nouveau à Haskell et j'ai du mal à comprendre ce qui ne va pas avec mon code ici.Haskell: Correctif possible: ajouter (Eq a) au contexte de
Voici ce que je suis censé faire:
par la définition suivante d'un arbre binaire
data BinaryTree a = Empty | Node a (BinaryTree a) (BinaryTree a)
On considère la fonction reflète qui forme l'image miroir d'un arbre binaire par gauche et droite échangeant des tout le long
reflect :: BinaryTree a -> BinaryTree a
reflect Empty = Empty
reflect (Node x l r) = Node x (reflect r) (reflect l)
Ecrit une fonction areMirrorImages qui détermine si deux arbres binaires t et u satisfont t = reflète u. La fonction ne devrait pas construire de nouveaux arbres, elle ne devrait donc pas appeler reflect ou Node; Bien qu'il puisse utiliser Node dans les modèles.
Voici ce que j'ai écrit:
areMirrorImages :: BinaryTree a -> BinaryTree a -> Bool
areMirrorImages Empty Empty = True
areMirrorImages (Node _ _ _) Empty = False
areMirrorImages Empty (Node _ _ _) = False
areMirrorImages (Node x l r) (Node y ll rr)
| x==y = ((areMirrorImages l rr) && (areMirrorImages r ll))
| otherwise = False
Lorsque je tente de l'exécuter, j'obtiens l'erreur suivante sur la ligne 49:
Impossible déduire (Eq a) du contexte() résultant d'une utilisation de '=='
solution possible: ajouter (Eq a) dans le contexte de la signature de type pour 'areMirrorImages'
Dans l'expression: x == y
I Je suis confus quant à pourquoi je reçois cette erreur et j'ai essayé de trouver des solutions en ligne, mais je n'ai rien trouvé jusqu'à présent. Merci.
OK, cela a du sens. Merci beaucoup de m'avoir aidé à comprendre cela! – Gus