Mercurial > hg > Applications > Tokio
diff Examples/etc/solve @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Examples/etc/solve Thu Aug 30 14:57:44 2007 +0900 @@ -0,0 +1,69 @@ +/* + + tokio interpreter on tokio + Thu Sep 4 11:06:06 GMT+9:00 1986 + +*/ + + +% main parts +solve((A,B)):- solve(A),solve(B). +solve(A):- t_clause(A,B),solve(B). + +%% temporal operators +solve((A && B)):- + solve(A) && solve(B). +solve(#A):- + #solve(A). +solve(@A):- + @solve(A). +solve(next(A)):- + next(solve(A)). +solve(keep(A)):- + keep(solve(A)). +solve(length(N)):- + length(N). + +%% functions +solve(A=B) :- eval(A,V),eval(B,V1),!,V=V1. +eval(V1,V) :- atomic(V1),!,V=V1. +eval(V1,V) :- var(V1),!,V=V1. +eval(@A,V) :- next(eval(A,V1)), V = @V1. +eval(A+B,V) :- eval(A,AA),eval(B,BB), V=AA+BB. + +%% system predicates +solve(A):- sys(A),prolog(A). + +sys(write(_)). +sys(nl). +sys(true). + +%% assertions +t_clause( counter(A) , (@A=A+1, next(counter(A)))). + +t_clause( ap([],A,A) , true). +t_clause( ap([H|X],Y,[H|Z]), ap(X,Y,Z)). + +%% tester +test1 :- solve(( + length(5),#write(1) + )). + +test2 :- solve(( + length(3),#write(0) && + length(2),#write(1) + )). + +test3 :- solve(( % this does not work + length(5),A=1, #(@A=A+1), #write(A) + )). + +test4 :- solve(( + length(5),A=1,counter(A),#write(A) + )). + +test5 :- solve(( + ap(A,B,[1,2,3]),write((A,B)),nl,fail + )). + +%%