Laboratory: Pairs and Pair Structures
Summary:
In this laboratory, you will further ground your understanding of what
happens behind the scenes
when Scheme deals with lists
and other pair-based structures.
Preparation
Make sure you have some blank pieces of paper (lined is okay) and
something with which to write.
Exercises
Exercise 1: Some Pictures
Draw box-and-pointer diagrams for each of the following lists:
((x) y z)
(x (y z))
((a) b (c ()))
Be prepared to share your pictures with me.
Exercise 2: Some Pairs
Enter each of the following expressions into Scheme. In each case, explain
why Scheme does or does not use the dot notation when displaying the value.
(cons 'a "Walker")
(cons 'a null)
(cons 'a "null")
(cons 'a "()")
(cons null 'a)
(cons null (cons null null))
Exercise 3: More Pictures
Draw a box-and-pointer representation of the value of the last two
expressions in the previous exercise.
Exercise 4: Are They Pairs?
What do you think that pair? will return for each of the
following? How about list?. Attempt to confirm each answer
experimentally and explain any that you found particularly tricky.
(cons 'a 'b)
(cons 'a (cons 'b 'c))
(cons 'a null)
null
(list 'a 'b 'c)
(list 'a)
(list)
Exercise 5: Is It A List?
You may recall that we told you that many kinds of data are
defined recursively. For example, a list is either (1) null
or (2) cons of anything and a list.
Using that recursive definition of lists, write a procedure,
(listp? val),
that determines whether or not val is a list.
You may not use list? in your definition
of listp?.