annotate tr.pl @ 0:cfb7c6b24319

Initial revision
author kono
date Thu, 30 Aug 2007 14:57:44 +0900
parents
children 61743469ee56
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 Copyright (C) 1988,2005, Shinji Kono
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
3 Everyone is permitted to copy and distribute verbatim copies
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
4 of this license, but changing it is not allowed. You can also
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
5 use this wording to make the terms for other programs.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
6
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
7 send your comments to kono@ie.u-ryukyu.ac.jp
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
8 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
9
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
10 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
11
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
12 Tokio to prolog compiler
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
13 Runtime routine
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
14 with register list
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
15
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
16 Mon Aug 5 09:01:29 JST 1985
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
17 fix put_queue Fri Jan 24 11:47:11 JST 1986
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
18 add tracer Sun Jun 22 12:47:21 JST 1986
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
19 fix empty/notempty Wed Mar 9 09:24:47 JST 1988
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
20 reducing compile time Fri Oct 14 03:27:08 JST 1988
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
21 add mcom and fix chop Sat Aug 5 22:25:15 JST 1989
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
22 meta call supported Sun Aug 6 00:55:42 JST 1989
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
23 $Header$
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
24 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
25
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
26 :-dynamic(r_fififi/1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
27 :-dynamic(r_skip/1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
28
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
29 r_header :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
30 write('
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
31 Tokio to prolog compiler $Revision$ $Date$
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
32 try ?- tokio_help.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
33 ').
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
34
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
35 user_help :- tokio_help.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
36 tokio_help :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
37 nl, r_header,nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
38 write(' com(File). : compile & compile program. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
39 write(' com(File,Output).: compile & counsult & save file. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
40 write(' pcom(File,Predicate-heads). : compile specified predicates. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
41 write(' pcom(File,Predicate-heads,Output).: compile specified predicates. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
42 write(' mcom(File). : preprocess '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
43 write(' mcom(File,Output).: preprocess & outputfile.'),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
44 write(' restart(File). : run tokio save file. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
45 write(' tokiodebug. : All computation will be traced. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
46 write(' tokionodebug. : Debug mode is switched off. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
47 write(' tokiodebugging. : Display some informations about tracing. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
48 write(' notimebacktrack. : no time backtrack.. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
49 write(' timebacktrack. : time backtrack.. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
50 write(' tokio. : start tokio top-level. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
51 write(' tokio predicate. : run tokio program. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
52 write(' reset_macro. : Reset Macro Definition. com predicates also reset Macros.'),nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
53 % write(' tokiospy : All predicate will be traced. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
54 % write(' tokiospy(F/N) : Predicate F which have N arity will be traced.'),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
55 % write(' tokionospy : All spy point are removed. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
56 % write(' tokionospy(F/N) : Spy point F/N will be removed. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
57 % write(' tokiodebugat(T) : Tracing will be start at time=Time. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
58 % write(' tokionodebugat : Start point of tracing is removed. '),nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
59
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
60 r_tokio0(Goals) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
61 cputime(Time),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
62 r_do_solve(Goals, C),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
63 cputime(Time1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
64 T is (Time1-Time), % sec
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
65 r_tokiostats(C, T).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
66 r_tokio0(_Goals) :- nl, write('--fail--'), nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
67
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
68 r_do_solve(Goals,C) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
69 r_put_queue(Goals, X, true, Q, Q1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
70 r_notEmpty(Q),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
71 ( recorded(tokiodebug, on, _), !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
72 r_solve_t(X,C,0,Q,Q1);
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
73 recorded(timebacktrack, off, _), !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
74 r_solve_d(X,C,0,Q,Q1);
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
75 r_solve(X,C,0,Q,Q1)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
76
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
77 notimebacktrack :- recorded(timebacktrack,_,Ref),erase(Ref),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
78 notimebacktrack :- recorda(timebacktrack,off,_Ref).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
79 timebacktrack :- recorded(timebacktrack,_,Ref),erase(Ref),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
80 timebacktrack :- recorda(timebacktrack,on,_Ref).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
81
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
82 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
83 % Quick and Easy Compile
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
85 r_put_queue(X, Y, Y, Q, Q) :- var(X),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
86 write('cannot call variable:'),write(X),nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
87 r_put_queue(X, (unifyNow(X,Xn),Xn,Y), Y, Q, Q) :- systemp(X),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
88 % Tokio's varible is local, so, meta call is also local to
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
89 % its value. But I don't care about its arguments.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
90 r_put_queue('$t'(Now,_Next),Z, Z1,Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
91 r_put_queue(Now, Z, Z1,Q, Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
92 r_put_queue((X,Y), Z, Z1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
93 r_put_queue(X,Z, Z2, Q,Q2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
94 r_put_queue(Y,Z2,Z1,Q2,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
95 r_put_queue(#P, (r_always(P,Q,Q1),Y), Y, Q, Q1) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
96 r_put_queue(next(P), (r_next(P,Q,Q1),Y), Y, Q, Q1) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
97 r_put_queue(length(N), (r_length(M,Q),Y), Y, Q, Q) :- !, % restricted length
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
98 M is N.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
99 r_put_queue(P, (P1,Y), Y, Q, Q1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
100 functor(P, H, N), N2 is N+2, N1 is N+1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
101 functor(P1, H, N2), arg(N1, P1, Q), arg(N2, P1, Q1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
102 r_put_queue_arg(N,P,P1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
103
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
104 r_put_queue_arg(0,_,_) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
105 r_put_queue_arg(M,F,F1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
106 arg(M,F,FA),arg(M,F1,FA),M1 is M-1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
107 r_put_queue_arg(M1,F,F1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
108
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
109 r_tokiostats(L, T) :- nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
110 write(L), write(' clock and '),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
111 write(T), write(' sec. '), nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
112
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
113 r_always(X,['$t'((r_always(Xn,Q,Q2),N),F,E,C)|Q],Q1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
114 unifyNowNext(X,Xx,Xn),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
115 'tokio_call'(Xx,['$t'(N,F,E,C)|Q2],Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
116 r_next(X,['$t'(N,F,E,C)|Q], % same as next(tokio_call(X))
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
117 ['$t'(N1,F,E,C)|Q1]) :- unifyNext(X,Xn),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
118 r_put_queue(Xn,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
119
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
120 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
121 % Tokio Temporal Resolution
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
122 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
123 r_solve(r_end,_Fin,_Now,_X,_Y) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
124 r_solve(X,Fin,Now,['$t'(Next,F,K,'$'(Fin,Now,Empty))|Futures],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
125 ['$t'(true,true,true,'$'(Fin,Now,Empty))|True]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
126 NextTime is Now+1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
127 nl,write('t'),write(Now),write(':'),ttyflush,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
128 call(X),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
129 r_exec_fin_keep(Empty,Fin,Now,F,K,Next,Next1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
130 r_solve(Next1, Fin, NextTime, Futures, True).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
131 r_solve(_,_,Now,_,_) :- B is Now-1, B>0, nl,write(b),write(B),write(':'),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
132 ttyflush,!,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
133
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
134 r_solve_t(r_end,_Fin,_Now,_X,_Y) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
135 r_solve_t(X,Fin,Now,['$t'(Next,F,K,'$'(Fin,Now,Empty))|Futures],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
136 ['$t'(true,true,true,'$'(Fin,Now,Empty))|True]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
137 r_tokioDebug(t(Empty,X,Fin,Now,F,K,Next,Futures,True),Now),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
138 NextTime is Now+1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
139 nl,write('t'),write(Now),write(':'),ttyflush,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
140 call(X),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
141 r_exec_fin_keep(Empty,Fin,Now,F,K,Next,Next1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
142 r_solve_t(Next1, Fin, NextTime, Futures, True).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
143 r_solve_t(_,_,Now,_,_) :- B is Now-1, B>0, nl,write(b),write(B),write(':'),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
144 ttyflush,!,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
145
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
146 r_solve_d(r_end,_Fin,_Now,_X,_Y) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
147 r_solve_d(X,Fin,Now,['$t'(Next,F,K,'$'(Fin,Now,Empty))|Futures],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
148 ['$t'(true,true,true,'$'(Fin,Now,Empty))|True]) :-!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
149 NextTime is Now+1, call(X),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
150 r_exec_fin_keep(Empty,Fin,Now,F,K,Next,Next1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
151 r_solve_d(Next1, Fin, NextTime, Futures, True).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
152
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
153 r_exec_fin_keep(empty, Fin, Fin, F, _, _, r_end) :- !, % end at this time
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
154 call(F).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
155 r_exec_fin_keep(notEmpty, Now, Fin, _, K, Next, Next) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
156 Now \== Fin,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
157 call(K).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
158
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
159 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
160 % Chop Operator Runtime
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
162 r_subBegin(['$t'(_,_,_,'$'(_,Now,_))|Q], % original interval
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
163 ['$t'((r_subBegin(Q,SQ,SQ1,Fin),N),F,K,'$'(Fin,Now,E))|SQ],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
164 ['$t'(N,F,K,'$'(Fin,Now,E))|SQ1],Fin). % subinterval's Fin
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
165
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
166 r_subFin( ['$t'(_, F , _, '$'(Fin,Fin,empty)) | _ ], % outer fin?
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
167 ['$t'(_, true, _, '$'(Fin,Fin,empty)) | _ ]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
168 call(F).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
169
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
170 r_subNotFin( LaterLoop, '$'(Q,Q1,QF,QF1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
171 ['$t'(N, F, K, '$'(OuterFin,Now,notEmpty)) | Q ],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
172 ['$t'(N1, F1, K1, '$'(OuterFin,Now,notEmpty)) | Q1 ],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
173 ['$t'(N, F, K, '$'(Fin,Now,Empty)) | QF ],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
174 ['$t'((LaterLoop,N1), F1, K1, '$'(Fin,Now,Empty)) | QF1 ]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
175 r_sub_check(OuterFin,Now,Fin).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
176
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
177 r_sub_check(OuterFin,Now,Fin) :- var(OuterFin),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
178 r_sub_check2(Fin,Now).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
179 r_sub_check(OuterFin,Now,Fin) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
180 OuterFin > Now,r_sub_check3(OuterFin,Now,Fin). %%%% Fin > Now, OuterFin > Now
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
181 r_sub_check2(Fin,_Now) :- var(Fin),!. %%%% freeze(Fin,Fin>Now).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
182 r_sub_check2(Fin,Now) :- Fin>Now.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
183 r_sub_check3(_OuterFin,_Now,Fin) :- var(Fin),!. %%%% freeze(Fin,(N<F,F<O))
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
184 r_sub_check3(OuterFin,Now,Fin) :- Now<Fin,Fin<OuterFin.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
185
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
186 %%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
187 % meta call ( same restriction as top level )
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
188 %%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
189 tokio_call(A,Q,Q) :- var(A),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
190 write('uninstantiated meta call'),nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
191 tokio_call(A,Q,Q1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
192 r_put_queue(A, X, true, Q, Q1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
193 call(X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
194
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
195 %%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
196 % Tokio System Call
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
197 %%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
198 % Thanks for Prof. Esterline and Dr. Kilis
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
199 r_empty(['$t'(_,_,_,'$'(F,F,empty))|_]).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
200 r_notEmpty(['$t'(_,_,_,'$'(F,N,notEmpty))|_]):- F\==N.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
201
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
202 r_length( 0, ['$t'(_,_,_,'$'(Fin,Fin,empty))|_] ) :-!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
203 r_length( L, ['$t'(_,_,_,'$'(Fin,Now,notEmpty))|_] ) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
204 Fin is Now+L.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
205
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
206 r_cputime(X) :- statistics(runtime,[X1,_]),X is X1/1000.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
207 r_cputime(X,Q,Q) :- r_cputime(X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
208
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
209
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
210 %%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
211 % Static Variable Runtime
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
212 %%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
213 r_set_value(Name,Value) :- var(Value),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
214 write('Assign non fixed value = '),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
215 write(Name),nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
216 r_set_value(Name,Value) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
217 %%%%%%% r_check(Name,Time),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
218 recorded(Name,(Name,V,_Time),_),!,V=Value.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
219 r_set_value(Name,Value) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
220 %%%%%%% r_check(Name,Time),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
221 recorda(Name,(Name,Value,_Time),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
222 r_set_value(Name,Value) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
223 recorded(Name,(Name,Value,_),Ref),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
224 erase(Ref),!,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
225
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
226 r_set_value(Name,Value,_Time) :- var(Value),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
227 write('Assign non fixed value = '),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
228 write(Name),nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
229 r_set_value(Name,Value,Time) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
230 recorded(Name,(Name,V,Time),_),!,V=Value.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
231 r_set_value(Name,Value,Time) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
232 recorda(Name,(Name,Value,Time),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
233 r_set_value(Name,Value,Time) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
234 recorded(Name,(Name,Value,Time),Ref),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
235 erase(Ref),!,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
236
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
237 % Special Cases
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
238
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
239 % #(A=B)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
240 % variable vs varible
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
241 % variable vs time constance
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
242 % *i <= ??
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
243
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
244 r_eq(A,B,['$t'((r_eq(C,D,E,F),G),H,I,J)|E],['$t'(G,H,I,J)|F]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
245 unifyNowNext(A,K,C),unifyNowNext(B,K,D).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
246 r_eqn(A,B,['$t'((r_eqn(C,B,D,E),F),G,H,I)|D],['$t'(F,G,H,I)|E]) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
247 unifyNowNext(A,B,C).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
248 r_assign(Static,A,['$t'((r_assign(Static,A,B,C),D),(r_set_value(Static,A,Time),E),F,G)|B],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
249 ['$t'(D,E,F,G)|C]):- G='$'(_Fin,Time,_Empty).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
250
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
251
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
252
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
253 % r_check(Name,Time) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
254 % recorded(time,Time,_),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
255 % ( recorded(Name,(Name,Value1,Time),_),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
256 % report_conflict(Name,Name,Time)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
257 % ; true),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
258 % ( recorded(r_write,(Name,Bus),_),(
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
259 % recorded(Bus,(Name2,Time),_),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
260 % report_conflict(Name,Name2,Time)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
261 % ; recorda(Bus,(Name,Time),_))
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
262 % ; true),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
263
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
264 r_read_value(Name,Value) :- recorded(Name,(Name,Value1,_),_),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
265 % recorded(time,Time,_),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
266 % recorda(Name,(Name,Value1,Time),_),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
267 % ( recorded(r_read,(Name,Bus),_),(
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
268 % recorded(Bus,(Name2,Time),_),Name2 \= Name,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
269 % report_conflict(Name,Name2,Time)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
270 % ; recorda(Bus,Name,_))
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
271 % ; true),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
272 Value = Value1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
273 r_read_value(Name,_Value) :- nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
274 write('Reference Not assigned value -- '),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
275 write(Name),nl.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
276
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
277 init_static :- recorded(r_static,Name,_),recorded(Name,_,Ref),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
278 erase(Ref),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
279 init_static :- abolish(r_skip,1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
280 assert(r_skip(-1)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
281
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
282 reset_static :- recorded(r_static,Name,Iref),recorded(Name,_,Ref),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
283 erase(Ref),erase(Iref),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
284
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
285 static([]) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
286 static([H|T]) :- !,static(H),static(T).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
287
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
288
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
289 % static(Name=Bus) :- !,static(Name),static(Bus),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
290 % r_read_bus(Name,Bus),r_write_bus(Name,Bus).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
291 % static(Name=[RBus,WBus]) :- !,static(Name),static(Bus),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
292 % r_read_bus(Name,RBus),r_write_bus(Name,WBus).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
293 static(Name) :- functor(Name,_H,_),recorded(r_static,Name,_),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
294 static(Name) :- functor(Name,_H,_),recordz(r_static,Name,_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
295
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
296 static_memory(L) :- static(L).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
297 static_register(L) :- static(L).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
298
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
299 r_read_bus(Name,Bus) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
300 (recorded(r_read,(Name,Bus),_);recordz(r_read,(Name,Bus),_)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
301 r_write_bus(Name,Bus) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
302 (recorded(r_write,(Name,Bus),_);recordz(r_write,(Name,Bus),_)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
303
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
304 /* :- static(time). */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
305
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
306 % r_report_conflict(Name,Name2,Time) :- nl,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
307 % write('Conflict *'),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
308 % write(Name),write(' and *'),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
309 % write(Name2),write(' at '),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
310 % write(Time).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
311
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
312 % A \= A :-!,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
313 % _ \= _.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
314
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
315 append([],X,X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
316 append([H|X],Y,[H|Z]) :- append(X,Y,Z).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
317
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
318 member(H,[H|_]) :-!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
319 member(H,[_|T]) :- member(H,T).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
320
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
321 /* for ttyflush */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
322
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
323 /* :- (ttyflush ; assert(ttyflush) ). */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
324
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
325 /* end of runtime */