Bonjour,
Je cherche à parcourir une liste de paires, faire une vérification sur le premier élément de chacune des paires (une égalité), puis d'utiliser la définition de la fonction qui est le 2e élément de la paire pour calculer et retourner une certaine valeur.
Donc, en gros, je dois regarder de quel signe est e3, puis utiliser le bon Vprim pour faire la bonne opération avec les valeurs e4 et e2. Cependant je ne sais pas comment faire cette vérification puis cet appel de fonction avec les bons paramètres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 type Var = String -- Expressions du code source en forme ASA. data Exp = Enum Int -- Une constante | Evar Var -- Une variable | Elet Var Exp Exp -- Une expr "let x = e1 in e2" | Ecall Exp Exp -- Un appel de fonction -- Valeurs renvoyées. data Val = Vnum Int -- Un nombre entier | Vprim (Val -> Val) -- Une fonction prédéfinie instance Show Val where show (Vnum x) = show x type Env = [(Var, Val)] -- L'environnement initial qui contient toutes les primitives. pervasive :: Env pervasive = [("+", Vprim (\(Vnum x) -> Vprim (\(Vnum y) -> Vnum (x + y)))), ("-", Vprim (\(Vnum x) -> Vprim (\(Vnum y) -> Vnum (x - y)))), ("*", Vprim (\(Vnum x) -> Vprim (\(Vnum y) -> Vnum (x * y)))), ("/", Vprim (\(Vnum x) -> Vprim (\(Vnum y) -> Vnum (x `div` y))))] eval :: Env -> Exp -> Val eval (env1)(Enum x) = (Vnum x) --eval (env1)(Ecall e1 e2) = case (e1) of -- (Ecall e3 e4) -> ?????
Voici un exemple d'un Ecall
Pouvez-vous m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part (Ecall (Ecall (Evar "+") (Evar "x")) (Enum 4))
Suis-je au moins sur le bon chemin ?
Partager