-- Code of Figure 9.11, pages 379-380 from -- Kenneth C. Louden, Programming Languages -- Principles and Practice 2nd Edition -- Copyright (C) Brooks-Cole/ITP, 2003 package body Queues is type Queuerep is record data: T; next: Queue; end record; function createq return Queue is begin return null; end createq; function enqueue(q:Queue;elem:T) return Queue 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; return temp; end enqueue; function frontq(q:Queue) return T is begin return q.next.data; end frontq; function dequeue(q:Queue) return Queue is begin if q = q.next then return null; else q.next := q.next.next; return q; -- corrected from code in text end if; end dequeue; function emptyq(q:Queue) return Boolean is begin return q = null; end emptyq; end Queues;