Mercurial > hg > Applications > Tokio
comparison Examples/etc/solve @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:cfb7c6b24319 |
---|---|
1 /* | |
2 | |
3 tokio interpreter on tokio | |
4 Thu Sep 4 11:06:06 GMT+9:00 1986 | |
5 | |
6 */ | |
7 | |
8 | |
9 % main parts | |
10 solve((A,B)):- solve(A),solve(B). | |
11 solve(A):- t_clause(A,B),solve(B). | |
12 | |
13 %% temporal operators | |
14 solve((A && B)):- | |
15 solve(A) && solve(B). | |
16 solve(#A):- | |
17 #solve(A). | |
18 solve(@A):- | |
19 @solve(A). | |
20 solve(next(A)):- | |
21 next(solve(A)). | |
22 solve(keep(A)):- | |
23 keep(solve(A)). | |
24 solve(length(N)):- | |
25 length(N). | |
26 | |
27 %% functions | |
28 solve(A=B) :- eval(A,V),eval(B,V1),!,V=V1. | |
29 eval(V1,V) :- atomic(V1),!,V=V1. | |
30 eval(V1,V) :- var(V1),!,V=V1. | |
31 eval(@A,V) :- next(eval(A,V1)), V = @V1. | |
32 eval(A+B,V) :- eval(A,AA),eval(B,BB), V=AA+BB. | |
33 | |
34 %% system predicates | |
35 solve(A):- sys(A),prolog(A). | |
36 | |
37 sys(write(_)). | |
38 sys(nl). | |
39 sys(true). | |
40 | |
41 %% assertions | |
42 t_clause( counter(A) , (@A=A+1, next(counter(A)))). | |
43 | |
44 t_clause( ap([],A,A) , true). | |
45 t_clause( ap([H|X],Y,[H|Z]), ap(X,Y,Z)). | |
46 | |
47 %% tester | |
48 test1 :- solve(( | |
49 length(5),#write(1) | |
50 )). | |
51 | |
52 test2 :- solve(( | |
53 length(3),#write(0) && | |
54 length(2),#write(1) | |
55 )). | |
56 | |
57 test3 :- solve(( % this does not work | |
58 length(5),A=1, #(@A=A+1), #write(A) | |
59 )). | |
60 | |
61 test4 :- solve(( | |
62 length(5),A=1,counter(A),#write(A) | |
63 )). | |
64 | |
65 test5 :- solve(( | |
66 ap(A,B,[1,2,3]),write((A,B)),nl,fail | |
67 )). | |
68 | |
69 %% |