Name _________________________

CS 60

Rex Worksheet (Worksheet 1)

This worksheet is keyed to the first part of Chapter 2 of the notes and the whole of Chapter 3 (maybe even a bit of Chapter 4). It focuses on list structures, recursion, and functional programming in rex. It is due by class on Thu., Feb. 7, and is worth 25 points.

1. What are the differences between a list and a set?

________________________________________________________.

2. Under what conditions are two lists equal?

________________________________________________________.

3. What is the fundamental list dichotomy?

________________________________________________________.

4. Under what condition(s) are the first and rest of a list not meaningful?

________________________________________________________.

5. What is meant by a variable binding?

________________________________________________________.

6. In the equation [F, S | R] = [7, 11, 13, 17], what are the resulting bindings of F, S, and R?

________________________________________________________.

7. If we bind [A, [B] | C] = [ [3,[4]], [[5]] ], what are the resulting bindings of A, B, and C?

________________________________________________________.

8. What is an example of a list whose length is two but whose leafcount is six?

________________________________________________________.

9. What is meant by a binary relation?

________________________________________________________.

10. If the list L = [3, 5, 7, 11, 13] is considered a partial function, what are L(3), L(0), and L(5)?

________________________________________________________.

11. Suppose f is the rex function such that f(x) = x%4; What is map(f,range(1998,2002))?

________________________________________________________.

12. Suppose superlog is the rex function from Assignment 1 problem 7. What is the value of map(superlog, [3,2,10,8], [243,64,100,64]) ?

________________________________________________________.

13. What is different about the two map functions in problems 11 and 12 above?

________________________________________________________.

14. Using the rex function assoc, what is the value of

assoc("feb", [["jan", 31], ["feb", 28], ["mar", 31]]) ?

________________________________________________________.

15. What is the value of ((x) => x*x+1)(9)?

________________________________________________________.

16. For f(x) = 2*x + 1, what is the value of ((F)=>F(F(5)))(f)?

________________________________________________________.

17. What is a predicate?

________________________________________________________.

18-19. Suppose P is the predicate such that P(x) = (x%5 == 0) and L is bound to the list [3, 5, 7, 11, 15, 19]. What are the values of the following:

some(P, L)_______________________________________________

all(P, L)_______________________________________________

keep(P, L)_______________________________________________

drop(P, L)_______________________________________________

find(P, L)_______________________________________________

find_indices(P, L) ________________________________________

20-25. (Typical midterm-type rex question) Write a function sumSort that accepts a list of lists of numbers as input and outputs the same list, but with the sublists in increasing order by sum. You can assume no two lists will have the same sum and all will be nonempty.

Example:

rex >  sumSort([ [10,4], [1,2,1], [-5,3], [0] ]);
[ [-5,3], [0], [1,2,1], [10,4] ]
Hint: one possibility is to first alter the list in such a way that you will be able to use the built-in sort function. Then, alter it back... .