Je suis inscrite à un cours de programmation qui comporte quelques semaines sur les languages fonctionnels. C'est un cours très rapide qui ne nous laisse pas vraiment le temps de comprendre les subtilités de Haskell que l'on doit utiliser pour réaliser nous travaux. Voici un bout de code que j'essaie de faire fonctionner...
La partie en noir nous a été donné et il faut implémenter toutes les versions de la fonction "eval" pour tous les types Exp. Je ne tiens pas à ce que personne ne fasse mon devoir au complet mais j'aimerais au moins comprendre comment démarrer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 data Exp = Enum Int -- Une constante | Eplus Exp Exp -- e1 + e2 | Etimes Exp Exp -- e1 * e2 | Eneg Exp -- (- e) | Egt Exp Exp -- e1 > e2 | Enot Exp -- (not e) | Elf Exp Exp Exp -- if e1 then e2 else e3 data Val = Vnum Int | Vbool Bool eval :: Exp -> Val eval (Enum n) = Vnum n
La ligne en bleu est celle que j'essaie de composer. Haskell me donne une erreur comme quoi je passe du types Exp -> Int -> Val quand il veut simplement Exp -> Val. Si je fais = n alors il me dit que je retourne juste Int au lieu de Val. J'ai tout essayé mais je n'arrive vraiment pas a lui faire retourné une valeur Val sans passer par un Int.
Le pire, c'est qu'éventuellement pour réussir "Eplus" par exemple je devrai faire des appels récursifs qui pourrons utiliser l'operateur d'addition (+)... "eval Eplus(Enum 3 Enum 4) qui devra donner 7" mais puisque Val peut être un booléen alors je ne sais vraiment pas comment m'y prendre.
Merci d'avance, je me sens très perdue...
Partager