Bonjour,
j’essaie de coder un typeur en prolog avec des regles bien definis que j’ai a coté, et je galère toujours autant en prolog et sa logique propre.
Ici, ma regle pour le if ne fonctionne pas
si e1:bool, si e2:t et si e3:t alors (if e1 e2 e3):t
ma regle prolog correspondante
type(iF(Cond,Cons,Alter),Env,Y) :- type(Cond,Env,T1) , type(Cons,Env,T2), type(Alter,Env,T2), lastOf(X,T1), X == bool, lastOf(Y,T2).
je comprends pas tellement ce qui ne vas pas. Ici les types sont représenté par des listes, par exemple int -> int c’est [int,int], et pour récupérer le type de retour j’ai ma fonction lastOf qui récupère le dernier élément d’une liste, donc je récupère le type de retour de la condition, je verifie que c’est un booléen (j’ai mes faits définit plus haut), ensuite je récupère le dernier element de T2, et il devient le type du if.