% Operational semantics of the small language % example of Chapter 13 expressed in Prolog % as given in Section 13.2.5, pages 593-594 of % Kenneth C. Louden, Programming Languages % Principles and Practice 2nd Edition % Copyright (C) Brooks-Cole/ITP, 2003 % sample small language program abstract syntax % from page 593: % seq(assign(a,plus(2,3)), % seq(assign(b,times(a,4)),assign(a,sub(b,5)))) reduce(plus(V1,V2),R) :- integer(V1), integer(V2), !, R is V1 + V2. reduce(plus(E,E2),plus(E1,E2)) :- reduce(E,E1). reduce(plus(V,E),plus(V,E1)) :- integer(V), !, reduce(E,E1). reduce_all(V,V) :- integer(V), !. reduce_all(E,E2) :- reduce(E,E1), reduce_all(E1,E2). reduce(config(I,Env),config(V,Env)) :- atom(I), !, lookup(Env, I, V). reduce(config(assign(I,V),Env),Env1) :- integer(V), !, update(Env, value(I,V), Env1).