root/tags/lgt290/library/queue.lgt

Revision 2, 1.3 KB (checked in by pmoura, 7 years ago)

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(queue,
3    implements(queuep),
4    extends(compound)).
5
6
7    :- info([
8        version is 1.0,
9        authors is 'Paulo Moura',
10        date is 2000/7/24,
11        comment is 'Queue predicates implemented using difference lists.']).
12
13
14    as_list(Queue-Back, List) :-
15        Queue == Back ->
16            List = []
17            ;
18            List = [Head| Tail],
19            Queue = [Head| Rest],
20            as_list(Rest-Back, Tail).
21
22
23    empty(Front-Back) :-
24        Front == Back.
25
26
27    head(Front-Back, Head) :-
28        Front \== Back,
29        Front = [Head| _].
30
31
32    join(Element, Front-[Element| Back], Front-Back).
33
34
35    join_all([], Queue, Queue).
36
37    join_all([Head| Tail], Queue1, Queue3) :-
38        join(Head, Queue1, Queue2),
39        join_all(Tail, Queue2, Queue3).
40
41
42    jump(Element, Front-Back, [Element| Front]-Back).
43
44
45    jump_all([], Queue, Queue).
46
47    jump_all([Head| Tail], Queue1, Queue3) :-
48        jump(Head, Queue1, Queue2),
49        jump_all(Tail, Queue2, Queue3).
50
51
52    length(Front-Back, Length) :-
53        length(Front, Back, 0, N),
54        Length = N.
55
56
57    length(Front, Back, N, N) :-
58        Front == Back, !.
59
60    length([_|Front], Back, K, N) :-
61        L is K+1,
62        length(Front, Back, L, N).
63
64
65    new(Back-Back).
66
67
68    serve(OldFront-Back, Head, NewFront-Back) :-
69        OldFront \== Back,
70        OldFront = [Head| NewFront].
71
72
73    valid(Queue) :-
74        nonvar(Queue),
75        valid2(Queue).
76
77
78    valid2(Queue-Back) :-
79        Queue == Back,
80        !.
81
82    valid2(Queue-Back) :-
83        nonvar(Queue),
84        Queue = [_| Tail],
85        valid2(Tail-Back).
86
87
88:- end_object.
Note: See TracBrowser for help on using the browser.