annotate tp.pl @ 4:f864bb4ba9a4 default tip

update tags
author convert-repo
date Fri, 07 Nov 2008 20:36:52 +0000
parents cfb7c6b24319
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 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 Tokio preprosessor
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
12 Thu Aug 22 15:52:08 JST 1985
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
13 Wed Sep 4 16:07:39 JST 1985
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
14 $Header$
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
15
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
16 use 'r_prepr' record to generate new predicate
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
17
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
18 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
19
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
20 read_macro( (A '$clause' B) ) :- !,recordz('r_prepr',(A,B),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
21 read_macro( A ) :- recordz('r_prepr',(A,true),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
22
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
23 read_function( (A '$clause' B ) ) :- !,recordz('r_func',(A,B),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
24 read_function( A ) :- recordz('r_func',(A,true),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
25
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
26 reset_macro :- recorda('r_tmp',0,_),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
27 reset_macro :- recorded('r_prepr', X, R), check_init(X),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
28 erase(R), fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
29 reset_macro :- recorded('r_func', X, R), check_init(X),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
30 erase(R), fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
31 reset_macro.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
32
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
33 check_init(('r_initr_',true)) :- !,recorded('r_tmp',_,Ref),erase(Ref),fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
34 check_init(_) :- recorded('r_tmp',_,_),!,fail.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
35 check_init(_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
36
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
37
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
38 preprocess((X,Y),(XX,YY)) :- !,preprocess(X,XX),preprocess(Y,YY).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
39 % preprosess(( :- X),( :- X) ) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
40 preprocess((H :- B), OUT) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
41 functor(H,HH,NN),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
42 (recorded('$mnum',(HH,NN,N),R),erase(R) ; N = 0),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
43 functor(H1,HH,NN),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
44 develop_args(0, NN, N, N1, H, H, H1, OUT1, (H1 :- B0),B0,BB),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
45 develop(B, BB, H, N1, N2, OUT, OUT1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
46 recordz('$mnum',(HH,NN,N2),_).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
47 preprocess(H,H1) :- preprocess((H :- true),H1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
48
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
49 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
50 develop(Original, Head, Base, NextBase, Qhead, Qtail).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
51
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
52 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
53
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
54
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
55 develop(A,'tokio_call'(A),_H,N,N,Q,Q) :- var(A),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
56 develop((A,B),(AA,BB),H,N,N1,Q,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
57 develop(A,AA,H,N,N2,Q,Q2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
58 develop(B,BB,H,N2,N1,Q2,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
59 develop(@(A),@(AA),H,N,N1,Q,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
60 develop(A,AA,H,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
61 develop(next(A),next(AA),H,N,N1,Q,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
62 develop(A,AA,H,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
63 develop(ifEmpty(A),ifEmpty(AA),H,N,N1,Q,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
64 develop(A,AA,H,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
65 develop(ifNotEmpty(A),ifNotEmpty(AA),H,N,N1,Q,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
66 develop(A,AA,H,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
67 develop((A & B),'$chop'(AA,BBB),H,N,N1,Q3,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
68 copyv(A,Acopy,V,Vcopy),(
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
69 V = [],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
70 develop(A,AA,H,N,N2,Q,Q2),!
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
71 ;
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
72 length(V,VN),VN>8,!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
73 develop(( 'r_eq'(V,Vcopy),Acopy ) ,AA,H,N,N2,Q,Q2)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
74 ;
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
75 V=[V1],Vcopy=[Vc1],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
76 develop(( 'r_eq'(V1,Vc1),Acopy ) ,AA,H,N,N2,Q,Q2)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
77 ;
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
78 V=[V1,V2],Vcopy=[Vc1,Vc2],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
79 develop(( 'r_eq'(V1,Vc1),'r_eq'(V2,Vc2),Acopy ) ,AA,H,N,N2,Q,Q2)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
80 ;
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
81 V=[V1,V2,V3],Vcopy=[Vc1,Vc2,Vc3],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
82 develop(( 'r_eq'(V1,Vc1),'r_eq'(V2,Vc2),'r_eq'(V3,Vc3),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
83 Acopy ) ,AA,H,N,N2,Q,Q2)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
84 ;
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
85 develop(( #(V=Vcopy),Acopy ) ,AA,H,N,N2,Q,Q2)),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
86 develop(B,BB,H,N2,N3,Q2,Q1),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
87 ( var(BB), !, Q3 = Q, BBB = B, N1 = N3
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
88 ; get_variable(BB,Vlist,[],_,0,_Vcount),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
89 new_head(H,BBB,N3,Vlist), % necessary to reduce variable copy..
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
90 N1 is N3+1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
91 Q3 = ((BBB :- BB),Q)),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
92 % single time funcitons
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
93 develop(A:=B, true, _Root, M, M, Q, Q) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
94 (A \= *('$CNT'(_)),A \= *(_); var(A)) ,!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
95 c_error((write('assign to non static:'),write(A:=B),nl)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
96 % <= use current value for addressing
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
97 develop(A<==B, true, _Root, M, M, Q, Q) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
98 (A \= *_,A \= [_|_]; var(A)) ,!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
99 c_error((write('assign to non static:'),write(A<==B),nl)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
100 develop(*A<==B, C, Root, M, M1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
101 d_function(A, AA, M, M2, Root, Q, Q2, C, C2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
102 d_function(B, BB, M2,M1, Root, Q2,Q1, C2,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
103 ('$CNT'(YY)=AA,'$CNT'(VV)=BB, 'r_assign'('$CNT'(YY),'$CNT'(VV)))).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
104 % develop(*A<=B, C, Root, M, M1, Q, Q1) :- atomic(A),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
105 % d_function(B, BB, M,M1, Root, Q,Q1, C, 'r_assign'(A,'$CNT'(BB))).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
106 develop(*('$CNT'(A)):=B, C, Root, M, M1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
107 d_function(A, AA, M, M2, Root, Q, Q2, C2, *('$CNT'(AA)):=BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
108 d_function(B, BB, M2,M1, Root, Q2,Q1, C, C2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
109 develop(*A:=B, C, Root, M, M1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
110 d_function(A, AA, M, M2, Root, Q, Q2, C2, *AA:=BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
111 d_function(B, BB, M2,M1, Root, Q2,Q1, C, C2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
112 develop(A=B, C, Root, M, M1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
113 d_function(A, AA, M, M2, Root, Q, Q2, C2, AA=BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
114 d_function(B, BB, M2,M1, Root, Q2,Q1, C, C2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
115 develop(A<B, C, Root, M, M1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
116 d_function(A, AA, M, M2, Root, Q, Q2, C2, AA<BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
117 d_function(B, BB, M2,M1, Root, Q2,Q1, C, C2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
118 develop(A>B, C, Root, M, M1, Q, Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
119 d_function(A, AA, M, M2, Root, Q, Q2, C2, AA>BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
120 d_function(B, BB, M2,M1, Root, Q2,Q1, C, C2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
121 % full time functions
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
122 develop(A,AAA,Root,N,N1,Q,Q1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
123 recorded('r_prepr', ((A :- AA),Body),_),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
124 develop_macro(Body,A,AA,AAA,Root,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
125 develop(A, C, Root, M, M1, Q, Q1) :- functor(A,H,N),functor(AA,H,N),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
126 develop_args(0, N, M, M1, Root, A, AA, Q, Q1, C, AA).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
127
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
128 develop_args(N , N, M, M , _Root, _A, _AA, Q, Q, C, C) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
129 develop_args(N1, N, M, M1, Root, A, AA, Q, Q1, C, C1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
130 N2 is N1+1, arg(N2,A,B), arg(N2,AA,BB),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
131 d_function(B, BB, M, M2, Root, Q, Q2, C, C2),!, %%% check full time here?
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
132 develop_args(N2, N, M2, M1, Root, A, AA, Q2, Q1, C2, C1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
133
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
134 develop_macro(true,_A,AA,AAA,Root,N,N1,Q,Q1) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
135 develop(AA,AAA,Root,N,N1,Q,Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
136 develop_macro(Body,A,AA,AAA,Root,N,N1,Q,Q2) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
137 get_variable(A,Vlist,[],_,0,_Vcount),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
138 macro(Body, Root, N, N2, Vlist, Q, Q1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
139 develop(AA,AAA,Root,N2,N1,Q1,Q2),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
140
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
141 /* make original head
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
142
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
143 Root head
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
144 New head
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
145 uniq Id
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
146 variable list
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
147 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
148
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
149 new_head(Root,New,No,Vlist) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
150 new_head(Root,New,No,Vlist,_,T,T).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
151
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
152 new_head(Root,New,No,Vlist,large,T,T1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
153 length(Vlist,N),N>10,!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
154 [A,B,C|T] = Vlist,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
155 functor(Root,HH,Arity),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
156 name(HH,HL),name(No,NL),name(Arity,NAL),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
157 concatenate(["r_",NL,HL,NAL],NewL),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
158 name(NewH,NewL),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
159 New =.. [NewH,A,B,C,T1].
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
160 new_head(Root,New,No,Vlist,small,_,_) :- functor(Root,HH,A),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
161 name(HH,HL),name(No,NL),name(A,NAL),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
162 concatenate(["r_",NL,HL,NAL],NewL),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
163 name(NewH,NewL),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
164 New =.. [NewH|Vlist].
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
165
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
166 /* make variable list */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
167
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
168 get_variable(H,V,V1,VL,N,N1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
169 var(H),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
170 not_vmember(H,V,V1,VL,N,N1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
171 get_variable(H,V,V1,VL,N,N1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
172 H = '$CNT'(_),!, % inherit constant
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
173 not_vmember(H,V,V1,VL,N,N1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
174 get_variable(F,V,V1,VL,N,N1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
175 functor(F,_,A),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
176 get_variable_arg(0,A,F,V, V1, VL, N,N1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
177
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
178 get_variable_arg(A,A,_F,V,V,_VL, N,N) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
179 get_variable_arg(A,A1,F,V,V1,VL,N,N1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
180 A2 is A+1, arg(A2, F, Arg),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
181 get_variable(Arg,V,V2,VL,N, N2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
182 get_variable_arg(A2,A1,F,V2,V1,VL,N2,N1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
183
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
184 not_vmember(H,[H|T],T,VL,N,N1) :- var(VL),!,VL = [H|_],N1 is N+1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
185 not_vmember(H, T,T,[H1|_VL],N,N) :- H == H1,!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
186 not_vmember(H, T,T,[H1|_VL],N,N) :- H == '$CNT'(H1),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
187 not_vmember(H, T, T1,[_|VL], N, N1) :- not_vmember(H,T,T1,VL,N,N1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
188
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
189 /* copyv
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
190 make copy with new variables
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
191 and its old variable list and new variable list
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
192
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
193 copyv(Old, New, OldVariable, NewVariable)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
194
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
195 a little dum algorithm
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
196 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
197
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
198 copyv(O,N,OV,NV) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
199 get_variable(O,OV,[],_,0,_Vcount),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
200 copy((O,OV),(N,NV)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
201
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
202 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
203 macro
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
204
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
205 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
206
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
207
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
208 macro((A '$clause' B), Root, N, N1, Vs, Q, Q2) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
209 single_macro(A, Root, N, N2, Vs, Q, Q1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
210 macro(B, Root, N2, N1, Vs, Q1, Q2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
211 macro(A, Root, N, N1, Vs, Q, Q1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
212 single_macro(A, Root, N, N1, Vs, Q, Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
213
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
214
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
215 single_macro(A , Root, N, N1, Vlist, (A,Q), Q) :- var(A),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
216 new_head(Root,A,N,Vlist),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
217 N1 is N+1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
218 single_macro((A :- B), Root, N, N2, Vlist, Q, Q2) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
219 head_optimize(BB,A,Root,Vlist,N,N1,Q,Q1),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
220 develop(B,BB,Root,N1,N2,Q1,Q2),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
221 single_macro(A, _Root, N, N, _Vlist, (A,Q), Q).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
222
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
223 head_optimize(BB,A,Root,Vlist,N,N2,((A:-BB),Q),Q) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
224 var(A),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
225 !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
226 new_head(Root,A,N,Vlist),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
227 N2 is N+1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
228 head_optimize(BB,A,_Root,_Vlist,N,N,((A:-BB),Q),Q).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
229
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
230 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
231 functions
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
232 should be seprated full time function and
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
233 now only function
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
234 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
235
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
236 d_function(A,AA,N,N,_Root,Q,Q,C,C) :- var(A),!, A = AA. % not interval constant
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
237 d_function(A,R1,N,N1,Root,Q,Q1,(AAA,C1),C) :- % not interval constant
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
238 recorded('r_func', ((A = R :- AA),Body) ,_),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
239 d_function(R,R1,N,N2,Root,Q2,Q1,C1,C),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
240 d_f_dev(Body,A,AA,AAA,Root,N2,N1,Q,Q2).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
241 d_function(cputime, '$CNT'(Value), N,N,_R,Q, Q, ('r_cputime'(Value),C),C) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
242 d_function(A,AA,N,N,_Root,Q,Q,C,C) :- atomic(A),!, A = AA.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
243 d_function(@A,@AA,N,N2,Root,Q,Q1,Next,C) :- !, % not interval constant
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
244 d_function(A,AA,N,N2,Root,Q,Q1,CN,true),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
245 d_next_check(CN,Next,C).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
246 d_function(*Name,'$CNT'(V),N,N2,Root,Q,Q1,C,C1) :- !, % not interval constant
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
247 d_function(Name,Name1,N,N2,Root,Q,Q1,C,('r_read_value'(Name1,'$CNT'(V)),C1)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
248 d_function(binary(B), Value, N,N,_R,Q, Q, C,C) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
249 c_binary(B,Value),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
250 d_function(hex(H), Value, N,N,_R,Q, Q, C,C) :- !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
251 c_hex(H,Value),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
252 d_function(Exp, '$CNT'(Value), N,N1,R,Q, Q1, C,C1) :- % not interval constant
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
253 n_function(Exp,A,B,Exp1,AA,BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
254 d_function_exp(A, AA, N,N2,R,Q, Q2,C, C2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
255 d_function_exp(B, BB, N2,N1,R,Q2,Q1,C2,('$CNT'(Value) is Exp1,C1)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
256 d_function(A,AA,N,N1,Root,Q,Q1,C,C1) :- functor(A,H,M),functor(AA,H,M),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
257 d_function_args(0,M,A,AA,N,N1,Root,Q,Q1,C,C1),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
258
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
259 d_next_check(true,C,C):-!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
260 d_next_check(CN,(next(CN),C),C):-!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
261
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
262 d_function_args(M,M,_A,_AA,N,N,_Root,Q,Q,C,C) :- !.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
263 d_function_args(M1,M,A,AA,N,N1,Root,Q,Q1,C,C1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
264 M2 is M1+1, arg(M2,A,B), arg(M2,AA,BB),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
265 d_function(B,BB,N,N2,Root,Q,Q2,C,C2),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
266 d_function_args(M2,M,A,AA,N2,N1,Root,Q2,Q1,C2,C1),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
267
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
268 d_function_exp(Exp, Exp1, N,N1,R,Q, Q1, C,C1) :- nonvar(Exp),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
269 n_function(Exp,A,B,Exp1,AA,BB),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
270 d_function_exp(A, AA, N,N2,R,Q, Q2, C,C2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
271 d_function_exp(B, BB, N2,N1,R,Q2, Q1, C2,C1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
272 d_function_exp(Exp, Exp1, N,N1,R,Q, Q1, C,C1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
273 d_function(Exp, Exp1, N,N1,R,Q, Q1, C,C1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
274
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
275 d_f_dev(true,_A,AA,AAA,Root,N,N1,Q,Q1) :-!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
276 develop(AA, AAA, Root, N, N1, Q, Q1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
277 d_f_dev(Body,A,AA,AAA,Root,N,N1,Q,Q1) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
278 get_variable(A,Vs,[],_,0,_Vcount),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
279 develop(AA, AAA, Root, N, N2, Q, Q2),!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
280 macro(Body, Root, N2, N1, Vs, Q2, Q1),!.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
281
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
282 /* */