root/tags/lgt2311/library/queue.lgt

Revision 3687, 1.3 KB (checked in by pmoura, 21 months ago)

Code reformating.

  • 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    :- info([
7        version is 1.0,
8        author is 'Paulo Moura',
9        date is 2000/7/24,
10        comment is 'Queue predicates implemented using difference lists.']).
11
12    as_list(Queue-Back, List) :-
13        Queue == Back ->
14            List = []
15            ;
16            List = [Head| Tail],
17            Queue = [Head| Rest],
18            as_list(Rest-Back, Tail).
19
20    empty(Front-Back) :-
21        Front == Back.
22
23    head(Front-Back, Head) :-
24        Front \== Back,
25        Front = [Head| _].
26
27    join(Element, Front-[Element| Back], Front-Back).
28
29    join_all([], Queue, Queue).
30    join_all([Head| Tail], Queue1, Queue3) :-
31        join(Head, Queue1, Queue2),
32        join_all(Tail, Queue2, Queue3).
33
34    jump(Element, Front-Back, [Element| Front]-Back).
35
36    jump_all([], Queue, Queue).
37    jump_all([Head| Tail], Queue1, Queue3) :-
38        jump(Head, Queue1, Queue2),
39        jump_all(Tail, Queue2, Queue3).
40
41    length(Front-Back, Length) :-
42        length(Front, Back, 0, N),
43        Length = N.
44
45    length(Front, Back, N, N) :-
46        Front == Back, !.
47    length([_|Front], Back, K, N) :-
48        L is K+1,
49        length(Front, Back, L, N).
50
51    new(Back-Back).
52
53    serve(OldFront-Back, Head, NewFront-Back) :-
54        OldFront \== Back,
55        OldFront = [Head| NewFront].
56
57    valid(Queue) :-
58        nonvar(Queue),
59        valid2(Queue).
60
61    valid2(Queue-Back) :-
62        Queue == Back,
63        !.
64    valid2(Queue-Back) :-
65        nonvar(Queue),
66        Queue = [_| Tail],
67        valid2(Tail-Back).
68
69:- end_object.
Note: See TracBrowser for help on using the browser.