(* Code of Figure 9.14, page 382 from Kenneth C. Louden, Programming Languages Principles and Practice 2nd Edition Copyright (C) Brooks-Cole/ITP, 2003 (Test code from page 383 added, too.) *) structure Queue1: QUEUE = struct datatype 'a Queue = Q of 'a list val createq = Q []; fun enqueue(Q lis, elem) = Q (lis @ [elem]); fun frontq (Q lis) = hd lis; fun dequeue (Q lis) = Q (tl lis); fun emptyq (Q []) = true | emptyq (Q (h::t)) = false; end; val q = Queue1.enqueue(Queue1.createq,3); Queue1.frontq q; val q1 = Queue1.dequeue q; Queue1.emptyq q1; open Queue1; val q = enqueue (createq,3); frontq q; val q1 = dequeue q; emptyq q1;