RosettaCodeData/Task/Queue-Definition/Haskell/queue-definition-2.hs

35 lines
756 B
Haskell

# Use a record to hold a Queue, using a list as the concrete implementation
record Queue(items)
procedure make_queue ()
return Queue ([])
end
procedure queue_push (queue, item)
put (queue.items, item)
end
# if the queue is empty, this will 'fail' and return nothing
procedure queue_pop (queue)
return pop (queue.items)
end
procedure queue_empty (queue)
return *queue.items = 0
end
# procedure to test class
procedure main ()
queue := make_queue()
# add the numbers 1 to 5
every (item := 1 to 5) do
queue_push (queue, item)
# pop them in the added order, and show a message when queue is empty
every (1 to 6) do {
write ("Popped value: " || queue_pop (queue))
if (queue_empty (queue)) then write ("empty queue")
}
end