type checker
Simple type checker in Prolog
Submitted by fabio on Sat, 2007-12-08 15:18.
A simple type checker written in Prolog.
%esercizio di pdp07 typechecker
typenv(X,[ass(X,Y)|_],Y).
typenv(X,[_|Env],Y) :- typenv(X,Env,Y).
type(num(_),_,int).
type(bfun(+),_,arr(int,arr(int,int))).
type(bfun(-),_,arr(int,arr(int,int))).
type(bfun(*),_,arr(int,arr(int,int))).
type(bfun(=),_,arr(int,arr(int,bool))).
type(bfun(<),_,arr(int,arr(int,bool))).
type(bfun(>),_,arr(int,arr(int,bool))).
type(var(X), Env, Y) :- typenv(X,Env,Y).
type(fun(V,M),Env,arr(T,W)):- type(M,[ass(V,T)|Env],W).
% senza occur check
%type(app(X,Y), Env, T) :- type(X,Env,arr(U,T)), type(Y,Env,U).
% con occur check: controlla tipaggi ricorsivi
type(app(X,Y), Env, T) :- type(X,Env,arr(U1,T)), type(Y,Env,U2),
unify_with_occurs_check(U1,U2).
type(cond(I,H,E), Env, T) :- type(I, Env, bool), type(H, Env, T), type(E, Env, T).
type(let(X,Y,Z), Env, T) :- type(Y, Env, U), type(Z,[ass(X,U)|Env],T).
- fabio's blog
- Add new comment
- Read more
- 638 reads
Posted in:

Recent comments
1 day 9 hours ago
2 days 1 hour ago
3 days 7 hours ago
4 days 14 hours ago
5 days 1 hour ago
5 days 3 hours ago
1 week 10 hours ago
1 week 23 hours ago
1 week 1 day ago
1 week 4 days ago