Fundamentals of Computer Science I (CS151.01 2006F)

Symbols and Lists

Summary: In this laboratory, you will explore the basic operations for working with lists and symbolic values. You may want to refer to the reading on symbols and the reading on lists as you work on this lab.

Important Procedures: append, car, cdr, cons, length, list, list-ref, and reverse.

Contents:

Exercises

Exercise 0: Preparation

Start DrScheme.

Exercise 1: Two Simple Lists

a. Call the cons procedure to create a list that has the number 1 as its first and only element. The result of your call should be (1).

b. Call the cons procedure to create a list that has the symbols a and b as its two elements. The result of your call should be (a b).

Exercise 2: Interpreting Compound cons Operations

a. Figure out (without using DrScheme) the result of the following expression.

(cons 'alpha (cons 'beta (cons 'gamma (cons 'delta null))))

b. Check your answer by asking DrScheme to evaluate this expression.

Exercise 3: Non-Lists

a. Determine the result of the expression (cons 'a 'b).

b. Determine the result of cons-ing 'd to the front of the value you created in step a.

Neither of these values are lists! Make sure that you are able to distinguish them from lists when looking at results.

Exercise 4: Using the list Procedure

Call the procedure list, supplying the numerals 17 and 43 as arguments. Describe the value returned by the procedure.

Exercise 5: Building a List of Symbols

a. How would you call the list procedure to create a list containing the symbols alpha, beta, and gamma, in that order?

b. Verify your answer by entering the code in DrScheme.

Exercise 6: Empty Lists

How would you invoke the list procedure to create an empty list?

Exercise 7: Repeated Elements

Determine by experiment whether it is possible to create a list in which the same element occurs more than once.

Exercise 8: A Small cdr

a. What is the cdr of a one-element list?

b. Verify your answer by experimentation.

Exercise 9: Extracting Information from Empty Lists

It makes no sense to apply the car and cdr procedures to an empty list, because there's no way to split off the first element of a list that has no elements. What happens if you try it anyway? Find out by having DrScheme evaluate a deliberately incorrect procedure call.

Exercise 10: Extracting Information from Symbols

a. Does it make sense to apply car and cdr to values other than lists? Why or why not?

b. Determine what happens if you apply these procedures to symbolic values and numeric values.

Exercise 11: Compound Lists

a. Create the list (e).

b. Create the list (d (e)).

c. Create the list (b c).

d. Create the list (a (b c) (d (e))). You may use list, cons, or a combination of the two.

Exercise 12: It's All Greek to Me

Use Scheme to give the name Greek-letters to the list constructed by the expression

(list 'alpha 'beta (list 'gamma-1 'gamma-2) 'delta)

Then use the length procedure to confirm that it has four elements.

Exercise 13: The Length of Emptiness

Determine the length of the empty list.

Exercise 14: Checking Your Own Length

a. Create a list of length 5. I don't care what appears in the list, provided that it is in good taste.

b. Check your answer by having Scheme compute the length of that list.

Exercise 15: Length of Compound Lists

a. Create the list (a (b c) (d (e))) and name it letters.

b. What do you think the length of letters should be?

c. Experimentally determine the length of letters.

d. Explain the result.

Exercise 16: Reversing Lists

Use Scheme to compute the reversal of the list whose elements are the symbols senior, third-year, second-year, and freshling, in that order.

Exercise 17: Reversing Compound Lists

a. If a list has another list as one of its elements (as in the case of letters above), should reverse reverse that inner list as well as the outer one?

b. Find out by experiment what Scheme does.

Exercise 18: Joining Lists

a. Create a list named symbols with the elements alpha and beta as its elements.

b. Create a list named numbers with the numbers 1, 2, and 3 as its elements.

c. Use Scheme to find the result of joining together (with append) symbols and numbers.

d. How many elements does the resulting list have?

Exercise 19: Listing Lists

a. Invoke the procedure list, applying it to symbols and numbers from the previous exercise.

b. How many elements does the resulting list have?

c. The answer to this question is different from the answer to the question at the end of the previous exercise. Why?

Exercise 20: Cons-ing Lists

a. Write a call to the procedure cons, applying it to symbols and numbers.

b. How many elements does the resulting list have?

c. Why is the answer to this question different from the answers to the questions at the end of the previous two exercises?

Exercise 21: Extracting Elements

Write a call to the list-ref procedure that will extract the fourth element of the list

(38 72 apple -1/3 sample)

That is, you should extract the number -1/3.

Exercise 22: Wrapup

Quit DrScheme and log out of the workstation.

Extras

If you have extra time,

Notes

Notes on Exercises 18, 19, and 20

The append procedure joins together the elements of a list to make a new list. Hence, when you append two lists together, the total number of elements in the new list is the sum of the number of elements in the lists.

The list procedure creates a new list whose elements are the parameters to list. Hence, if list takes two parameters, the length of the result is always two, regardless of what those parameters are.

The cons procedure builds a new list by placing its first parameter at the start of its second parameter (which is a list). Hence, the length of the result is one more than the length of the second parameter.

 

History

2 Septemer 1997 [John David Stone]

31 March 2000 [John David Stone]

Friday, 1 September 2000 [Samuel A. Rebelsky]

Sunday, 28 January 2001 [Samuel A. Rebelsky]

Monday, 29 January 2001 [Samuel A. Rebelsky]

Friday, 6 September 2002 [Samuel A. Rebelsky]

Wednesday, 22 January 2003 [Samuel A. Rebelsky]

Tuesday, 28 January 2003 [Samuel A. Rebelsky]

Wednesday, 30 August 2006 [Samuel A. Rebelsky]

 

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Thu Nov 30 21:43:03 2006.
The source to the document was last modified on Wed Aug 30 11:03:34 2006.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2006F/Labs/lists.html.

You may wish to validate this document's HTML ; Valid CSS! ; Creative Commons License

Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright © 2006 Samuel A. Rebelsky. This work is licensed under a Creative Commons Attribution-NonCommercial 2.5 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.