You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sicp-all-tasks/sicp/3_002e21

33 lines
1.1 KiB

Exercise 3.21: Ben Bitdiddle decides to test the
queue implementation described above. He types in the procedures to the Lisp
interpreter and proceeds to try them out:
(define q1 (make-queue))
(insert-queue! q1 'a)
((a) a)
(insert-queue! q1 'b)
((a b) b)
(delete-queue! q1)
((b) b)
(delete-queue! q1)
(() b)
“It’s all wrong!” he complains. “The interpreter’s response shows that the
last item is inserted into the queue twice. And when I delete both items, the
second b is still there, so the queue isn’t empty, even though it’s
supposed to be.” Eva Lu Ator suggests that Ben has misunderstood what is
happening. “It’s not that the items are going into the queue twice,” she
explains. “It’s just that the standard Lisp printer doesn’t know how to make
sense of the queue representation. If you want to see the queue printed
correctly, you’ll have to define your own print procedure for queues.” Explain
what Eva Lu is talking about. In particular, show why Ben’s examples produce
the printed results that they do. Define a procedure print-queue that
takes a queue as input and prints the sequence of items in the queue.