RosettaCodeData/Task/Queue-Definition/Picat/queue-definition-1.picat

50 lines
1.0 KiB
Plaintext

go =>
println("Test 1"),
queue_test1,
nl.
empty(Q) => Q = [].
push(Queue, Value) = Q2 =>
Q2 = [Value] ++ Queue.
pop(Q,_) = _, Q==[] ; var(Q) =>
throw $error(empty_queue,pop,'Q'=Q).
pop(Queue,Q2) = Queue.last() =>
Q2 = [Queue[I] : I in 1..Queue.len-1].
queue_test1 =>
% create an empty queue
println("Start test 2"),
empty(Q0),
printf("Create queue %w%n%n", Q0),
% add numbers 1 and 2
println("Add numbers 1 and 2 : "),
Q1 = Q0.push(1),
Q2 = Q1.push(2),
% display queue
printf("Q2: %w\n\n", Q2),
% pop element
V = Q2.pop(Q3),
% display results
printf("Pop : Value: %w Queue: %w\n\n", V, Q3),
% test the queue
print("Test of the queue: "),
( Q3.empty() -> println("Queue empty"); println("Queue not empty") ),
nl,
% pop the elements
print("Pop the queue : "),
V1 = Q3.pop(Q4),
printf("Value %w Queue : %w%n%n", V1, Q4),
println("Pop empty queue:"),
catch(_V = Q4.pop(_Q5),Exception,println(Exception)),
nl,
println("\nEnd of tests.").