annotate example @ 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 % Temporal Logic Programming Language Tokio
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
4 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
5 % Fri Jun 6 1986
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
6 % S.Kono
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
7 % The Faculty of Engineering
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
8 % The University of Tokyo
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
9 % a83793@tansei.u-tokyo.csnet
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
10 %%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
11 % 4.1 simple examples
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
12
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
13 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
14 % No.0 always operator #
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
15 % length operator
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
16 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
17 % 1 1 1 1 1 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
18 % |---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
19 % t0 t1 t2 t3 t4 t5
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
20
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
21 t0 :- #write(1),length(5).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
22
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
23
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
24 % No.1 chop operator
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
25 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
26 % 0 0 0 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
27 % 1 1 1 1 1 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
28 % |---|---|---|---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
29 % |--- I0 ----|------- I1 --------|
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
30 % |------------ I ----------------|
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
31
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
32 t1 :- #write(0),length(3) && #write(1),length(5).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
33
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
34
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
36 % No.2 fin and keep
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
37 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
38 % 0 0 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
39 % 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
40 % 2 2 2 2 2 2
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
41 % 3
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
42 % |---|---|---|---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
43
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
44 t2 :- keep(write(0)), fin(write(1)), length(3)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
45 && #write(2), fin(write(3)), length(5).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
46
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
47
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
49 % No.3 next operator
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
50 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
51 % 1 2 3 4 5
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
52 % |---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
53
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
54 t3 :- length(5), I = 1, counter(I), #write(I).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
55
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
56 counter(I) :- keep( @I = I+1 ).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
57
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
58
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
60 % No.4 stable operator
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
61 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
62 % 2 2 2 2 2 2
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
63 % |---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
64
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
65 t4 :- length(5), I = 2, stable(I), #write(I).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
66
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
67 % stable(I) :- keep( @I = I ). (defined internally)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
68
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
69
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
70 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
71 % No.5 temporal assignment
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
72 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
73 % A 0 1 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
74 % |---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
75 % B 1 0 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
76 % |---|---|---|---|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
77
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
78 t5 :- A = 0, B = 1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
79 ( A <- B, B <- A, length(3) &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
80 A <- B, B <- A, length(2) && true ),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
81 #write((A,B)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
82
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
83 % A <- B :- C = B, stable(C), fin( A = C ).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
84 % (defined internally)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
85 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
86 % B 0 ? ... ? ?
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
87 % |---|-- --|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
88 % C 0 0 ... 0 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
89 % |---|-- --|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
90 % A ? ? ... ? 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
91 % |---|-- --|---|---->
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
92
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
93
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
94 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
95 % No.6 interval join
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
96 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
97
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
98 t6 :- length(8),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
99 N=3,(N gets N+1, halt( N=5 ) && stable(N)),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
100 M=0,(M gets M+1, fin( M=6 ) && stable(M)),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
101 #write((N,M)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
102
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
103 % A gets B :- keep(@A=B).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
104
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
105
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
107 % No.7 back track to the past
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
108 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
109
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
110 t7:- length(5),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
111 fin(M=N),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
112 N=3,(N gets N+1 && stable(N)),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
113 M=0,(M gets M+1 && stable(M)),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
114 #write((N,M)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
115
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
116 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
117 % No.8 correct chop
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
118 % Not so important.... but
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
119 % Chop becomes slow in correct execution
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
120
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
121 a(b):-true.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
122 b(c):-true.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
123 c(X) :- a(X) & @ b(X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
124
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
125 t8 :- length(3),c(X),#write(X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
126
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
127 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
128 % No.9 and No. 10 projection
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
129 % Simple example of projection. Ben Moszkowski. Updated 19 Aug 85.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
130 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
131 % changing unit of time using projection
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
132 % length(2) proj body(I,J)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
133 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
134 % |--|--|--|--|--|--|--|--| (skip,stable(I),stable(J) & skip)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
135 % I 0 1 2 3 4
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
136 % |-----|-----|-----|-----| body(I,J)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
137
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
138 body(I,J) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
139 I=0,I gets I+1,J=0,J gets J+I,halt(I=4).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
140 t9 :- (skip,stable(I),stable(J) & skip) proj body(I,J),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
141 #((write('I='),write(I),write(' J='),write(J))).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
142
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
143 % |--|--|--|--|--|--|--|--|--|--| (length(I),stable(I),stable(J)& skip)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
144 % I 0 1 2 3 4
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
145 % |--|-----|--------|-----------| body(I,J)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
146
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
147 t10:- (length(I),stable(I),stable(J)& skip) proj body(I,J),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
148 #((write('I='),write(I),write(' J='),write(J))).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
149
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
150 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
151 % No.11 prefix
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
152 % Terminate an interval early
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
153
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
154 t11:-A=1,prefix((A gets 2*A,length(10))),halt(A=16),#write('I='),#write(A).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
155
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
156 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
157 %
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
158 % 4.2 two way description of Tokio
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
159 % 1) algorithm description using "chop operator"
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
160
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
161 magasync(A,B,Res):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
162 (if A < 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
163 then Aab <- - A
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
164 else Aab <- A ),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
165 (if B < 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
166 then Bab <- - B
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
167 else Bab <- B )
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
168 &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
169 (if Aab > Bab
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
170 then G <- Aab, L <- Bab
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
171 else G <- Bab, L <- Aab)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
172 &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
173 Sqs <- G * 7 / 8 + L / 2 , G <- G
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
174 &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
175 (if G > Sqs
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
176 then Res <- G
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
177 else Res <- Sqs).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
178
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
179 % 2) "Always operator" based description
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
180
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
181 /* data flow calculation */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
182
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
183 magasync_dataflow(A,B,Res):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
184 Aab = 0, Bab = 0, G = 0, Res = 0,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
185 L = 0, Sqs = 0, G1 = 0, % initialize
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
186 #abs_unit(A,Aab),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
187 #abs_unit(B,Bab),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
188 #maxmin(Aab,Bab,G,L),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
189 #calc(G,L,Sqs),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
190 #delay(G,G1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
191 #result(G1,Sqs,Res).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
192
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
193 delay(G,G1):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
194 @G1 = G.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
195
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
196 abs_unit(I,O):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
197 if I < 0 then @O = -I else @O = I .
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
198
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
199 maxmin(I1,I2,O1,O2):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
200 if I1 > I2 then (@O1 = I1, @O2 = I2)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
201 else (@O1 = I2, @O2 = I1) .
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
202
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
203 calc(I1,I2,O):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
204 @O = I1 * 7 / 8 + I2 / 2 .
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
205
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
206 result(I1,I2,O):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
207 if I1 > I2 then @O = I1 else @O = I2 .
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
208
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
209
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
210 mag1:- A=5,B=6,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
211 magasync(A,B,Res), write_fk([A,B,Res]).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
212
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
213 mag2:- Va = [1,2,3,4,5,6,7], Vb = [1,2,3,4,5,6,7],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
214 input_data(A,Va),input_data(B,Vb),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
215 magasync_dataflow(A,B,Res), write_fk([A,B,Res]).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
216
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
217 write_fk(X) :- keep(write(X)),fin(write(X)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
218 write_fk(A) :- fin(write(A)),keep(write(A)).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
219
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
220 input_data(0,[]) :- !,empty.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
221 input_data(V,[H|T]):-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
222 V = H,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
223 @T = T,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
224 @input_data(V,T).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
225
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
226
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
227 %___________________________
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
228 %4.3 pipeline merge sorter
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
229
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
230
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
231 sorter :- Strdata = [10,20,5,100,1,6,2,3],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
232 datagen(Strdata,Data),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
233 pipe(Data,Out),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
234 length(18),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
235 #write(Out).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
236
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
237 % Data Generator
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
238
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
239 datagen([],[]):-true.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
240 datagen([H|T],Out) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
241 Out = [H],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
242 @T = T, @datagen(T,Out).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
243
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
244 % Pipeline Merge Sorter
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
245
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
246 pipe(I0,Out) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
247 I1 = [], I2 = [], Out = [],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
248 proc_start(I0,I1, 2,1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
249 proc_start(I1,I2, 4,2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
250 proc_start(I2,Out,8,4).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
251
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
252 % Processor Unit
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
253
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
254 proc_start(I,O,P,PP) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
255 X = [], Y = [], Z = [], T = 1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
256 #proc(I,O,X,Y,Z,T,P,PP).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
257
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
258 proc(I,O,X,Y,Z,T,_P,_PP) :- X=[],Y=[],I=[],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
259 @X=X, @Y=Y, @Z=Z, @O=[], @T=1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
260 proc(I,O,X,Y,Z,T,P,PP) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
261 load(I,O,X,Y,Yn,Z,Zn,T,P,PP),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
262 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
263
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
264 load(I,_O,_X,Y,Yn,Z,Zn,T,_P,PP) :- T=<PP, !,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
265 append(Z,I,Zn), @Z=Zn, Yn=Y,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
266 @T=T+1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
267 load(I,_O,_X,Y,Yn,Z,_Zn,T,P,_PP) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
268 append(Y,I,Yn), @Z=[],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
269 (if T<P then @T=T+1 else @T=1).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
270
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
271 merge(_I,O,X,Y,Yn,_Z,Zn,T,_P,PP) :-X=[],Yn=[],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
272 @O=[], @Y=Yn,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
273 (if T=PP then @X=Zn else @X=X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
274 merge(_I,O,X,Y,Yn,_Z,Zn,T,_P,PP) :- X=[A|L],Yn=[],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
275 @O=[A], @Y=Yn,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
276 (if T=PP then @X=Zn else @X=L).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
277 merge(_I,O,X,Y,Yn,_Z,Zn,T,_P,PP) :-X=[],Yn=[B|N],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
278 @O=[B], @Y=N,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
279 (if T=PP then @X=Zn else @X=X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
280 merge(_I,O,X,Y,Yn,_Z,_Zn,_T,_P,_PP) :-X=[A|L],Yn=[B|N],!,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
281 (if A<B then
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
282 @O=[A], @X=L, @Y=Yn
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
283 else
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
284 @O=[B], @Y=N, @X=X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
285
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
286 append(Nil,L,L1) :- Nil=[],L=L1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
287 append(X,L,Y) :-[H|T]=X,[H1|M]=Y,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
288 H=H1,append(T,L,M).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
289
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
290 test :- t0 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
291 t1 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
292 t2 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
293 t3 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
294 t4 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
295 t5 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
296 t6 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
297 t7 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
298 t8 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
299 % t9 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
300 % t10 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
301 % t11 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
302 mag1 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
303 mag2 & @
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
304 sorter.