-- Code of Queues body on pages 391-392 from -- Kenneth C. Louden, Programming Languages -- Principles and Practice 2nd Edition -- Copyright (C) Brooks-Cole/ITP, 2003 -- (Opaque static queue) package body Queues2 is type Queuerep; type Queue is access Queuerep; type Queuerep is record data: T; next: Queue; end record; q: Queue; procedure enqueue(elem:T) is temp: Queue; begin temp := new Queuerep; temp.data := elem; if (q /= null) then temp.next := q.next; q.next := temp; else temp.next := temp; end if; q := temp; end enqueue; function frontq return T is begin return q.next.data; end frontq; procedure dequeue is begin if q = q.next then q := null; else q.next := q.next.next; q := q.next; end if; end dequeue; function emptyq return Boolean is begin return q = null; end emptyq; begin q := null; end Queues2;