annotate Examples/sorter/psort @ 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 test :- Strdata = [10,20,5,100,1,6,2,3],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
3 datagen(Strdata,Data),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
4 pipe(Data,Out),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
5 length(18),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
6 #write(Out).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
7
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
8 run :- Strdata = [10,20,5,100,1,6,2,3],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
9 datagen(Strdata,Data),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
10 pipe(Data,Out),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
11 length(18).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
12
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
13 % Data Generator
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
14
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
15 datagen([],[]).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
16 datagen([H|T],Out) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
17 Out = [H], @T = T, @datagen(T,Out).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
18
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
19 % Pipeline Merge Sorter
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
20
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
21 pipe(I0,Out) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
22 I1 = [], I2 = [], Out = [],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
23 proc_start(I0,I1, 2,1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
24 proc_start(I1,I2, 4,2),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
25 proc_start(I2,Out,8,4).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
26
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
27 % Processor Unit
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
28
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
29 proc_start(I,O,P,PP) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
30 X = [], Y = [], Z = [], T = 1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
31 #proc(I,O,X,Y,Z,T,P,PP).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
32
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
33 proc(I,O,X,Y,Z,T,P,PP) :- X=[],Y=[],I=[],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
34 @X=X, @Y=Y, @Z=Z, @O=[], @T=1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
35 proc(I,O,X,Y,Z,T,P,PP) :-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
36 load(I,O,X,Y,Yn,Z,Zn,T,P,PP),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
37 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
38
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
39 load(I,O,X,Y,Yn,Z,Zn,T,P,PP) :- PP>=T,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
40 append(Z,I,Zn), @Z=Zn, Yn=Y, @T=T+1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
41 load(I,O,X,Y,Yn,Z,Zn,T,P,PP) :- T>PP,T<P,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
42 append(Y,I,Yn), @Z=[],@T=T+1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
43 load(I,O,X,Y,Yn,Z,Zn,T,P,PP) :- T>PP,T>=P,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
44 append(Y,I,Yn), @Z=[],@T=1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
45
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
46 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP) :-X=[],Yn=[],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
47 @O=[], @Y=Yn,switch(T,PP,X,Zn,X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
48 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP) :- X=[A|L],Yn=[],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
49 @O=[A], @Y=Yn,switch(T,PP,X,Zn,L).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
50 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP) :-X=[],Yn=[B|N],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
51 @O=[B], @Y=N,switch(T,PP,X,Zn,X).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
52 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP) :-X=[A|L],Yn=[B|N],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
53 A<B,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
54 @O=[A], @X=L, @Y=Yn.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
55 merge(I,O,X,Y,Yn,Z,Zn,T,P,PP) :-X=[A|L],Yn=[B|N],
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
56 A>=B,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
57 @O=[B], @Y=N, @X=X.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
58
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
59 switch(T,PP,X,Zn,L) :- T=PP, @X=Zn.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
60 switch(T,PP,X,Zn,L) :- T\=PP, @X=L.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
61
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
62
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
63 append(Nil,L,L1) :- Nil=[],L=L1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
64 append(X,L,Y) :-[H|T]=X,[H1|M]=Y,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
65 H=H1,append(T,L,M).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
66