0
|
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 %%
|