Typeur en prolog

prolog,regles, typage

Le problème exposé dans ce sujet a été résolu.

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.

+0 -0

Je ne comprends pas pourquoi tu utilises des listes pour tes types de fonctions (pourquoi pas simplement arr(T1, T2) pour représenter T1T2T1 \to T2 ?), et en particuler pourquoi tu t’attends à avoir des types de fonctions ici; le type de e1 doit être juste bool, pas un truc de la forme machin -> bool.

P.S.: Prolog c’est rigolo mais, pour écrire des typeurs, lambdaProlog est encore plus drôle !

+0 -0

Je ne comprends pas pourquoi tu utilises des listes pour tes types de fonctions (pourquoi pas simplement arr(T1, T2) pour représenter T1T2T1 \to T2 ?), et en particuler pourquoi tu t’attends à avoir des types de fonctions ici; le type de e1 doit être juste bool, pas un truc de la forme machin -> bool.

Effectivement, c’est plus simple que des listes..

Et sinon, oui effectivement je devrais meme pas attendre de liste, c’est de ma faute j’ai commencer a écrire un typeur en faisant un peu n’importe quoi avec mes faits… je vais reprendre merci.

P.S.: Prolog c’est rigolo mais, pour écrire des typeurs, lambdaProlog est encore plus drôle !

gasche

Je note pour mes projets persos ! parce que ici c’est une partie d’un projet d’UE donc prolog est imposé

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte