RosettaCodeData/Task/Queue-Usage/Prolog/queue-usage.pro

49 lines
1,005 B
Prolog
Raw Permalink Normal View History

2013-04-10 23:57:08 -07:00
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% definitions of queue
empty(U-V) :-
2014-01-17 05:32:22 +00:00
unify_with_occurs_check(U, V).
2013-04-10 23:57:08 -07:00
push(Queue, Value, NewQueue) :-
2014-01-17 05:32:22 +00:00
append_dl(Queue, [Value|X]-X, NewQueue).
2013-04-10 23:57:08 -07:00
pop([X|V]-U, X, V-U) :-
2014-01-17 05:32:22 +00:00
\+empty([X|V]-U).
2013-04-10 23:57:08 -07:00
append_dl(X-Y, Y-Z, X-Z).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% use of queue
queue :-
2014-01-17 05:32:22 +00:00
% create an empty queue
empty(Q),
format('Create queue ~w~n~n', [Q]),
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
% add numbers 1 and 2
write('Add numbers 1 and 2 : '),
push(Q, 1, Q1),
push(Q1, 2, Q2),
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
% display queue
format('~w~n~n', [Q2]),
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
% pop element
pop(Q2, V, Q3),
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
% display results
format('Pop : Value ~w Queue : ~w~n~n', [V, Q3]),
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
% test the queue
write('Test of the queue : '),
( empty(Q3) -> writeln('Queue empy'); writeln('Queue not empty')), nl,
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
% pop the elements
write('Pop the queue : '),
pop(Q3, V1, Q4),
format('Value ~w Queue : ~w~n~n', [V1, Q4]),
2013-04-10 23:57:08 -07:00
2014-01-17 05:32:22 +00:00
write('Pop the queue : '),
pop(Q4, _V, _Q5).