annotate Examples/etc/solve @ 0:cfb7c6b24319

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