File: queue.kl1

package info (click to toggle)
klic 3.003-1.1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 7,068 kB
  • ctags: 6,333
  • sloc: ansic: 101,584; makefile: 3,395; sh: 1,321; perl: 312; exp: 131; tcl: 111; asm: 102; lisp: 4; sed: 1
file content (68 lines) | stat: -rw-r--r-- 1,572 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* ---------------------------------------------------------- 
%   (C)1993,1994,1995 Institute for New Generation Computer Technology 
%       (Read COPYRIGHT for detailed information.) 
%   (C)1996, 1997, 1998, 1999 Japan Information Processing Development Center
%       (Read COPYRIGHT-JIPDEC for detailed information.)
----------------------------------------------------------- */
:- module queue.


create(Stream) :-
	CAR = CDR,
	main(Stream,[],0)+CAR+CDR.


main([],		 []		)+No+CAR+CDR :- CDR = [].
main([],		 [S|ST]	)+No+CAR+CDR :- main(S,ST)+No+CAR+CDR.
main([do(S)|T],	 ST		)+No+CAR+CDR :- main(S,[T|ST])+No+CAR+CDR.
otherwise.
main([Message|T],ST		)+No+CAR+CDR :-
	message(Message)-No-CAR-CDR,
	main(T,ST)+No+CAR+CDR.


message(empty(YorN))-No-CAR-CDR :-
	No =:= 0 |
	YorN = yes.
message(empty(YorN))-No-CAR-CDR :-
	No =\= 0 |
	YorN = no.

message(put(Value),No1,No2)-CAR-CDR :-
	No2 := No1 + 1,
	dlist(Value)-CDR.

message(get(Value),No1,No2)-CAR-CDR :-
	No1 > 0 |
	No2 := No1 -1,
	dlist(Value)-CAR.

message(get_if_any(Value),No1,No2)-CAR-CDR :-
	No1 =:= 0 |
	No2 = No1,
	Value = {}.
message(get_if_any(Value1),No1,No2)-CAR-CDR :-
	No1 =\= 0 |
	message(get(Value2),No1,No2)-CAR-CDR,
	Value1 = {Value2}.

message(get_all(Values),No1,No2,CAR1,CAR2)-CDR :-
	No2 = 0,
	get_all(No1,CAR1,CAR2,Values).

message(carbon_copy(Values))-No-CAR-CDR :-
	get_all(No,CAR,_,Values).


dlist(V,LIST,CDR) :-
	LIST = [V|CDR].


get_all(No,CAR,TAIL,V):-
	No =:= 0 |
	CAR	= TAIL,
	V	= [].
get_all(No,[CAR|CDR],TAIL,V1):-
	No =\= 0 |
	V1 = [CAR|V2],
	get_all(~(No-1),CDR,TAIL,V2).