Lab 4
1 Notes on Testing and Language Choice
First: unless you’re feeling really gung-ho, do this lab in #lang racket, not in #lang typed/racket.
Second: you can’t check equality of functions directly, which makes test cases difficult. When an exercise asks you to produce a function, the test case should go ahead and supply inputs to the function, so that you can test equality of numbers rather than functions.
2 Applying Lambdas
What should this expression produce?
((lambda (x) (+ x 2)) 3)
Try running it. Did it produce what you expected?
Next: what should this expression produce?
((lambda (f g) (f (g 3))) (lambda (x) (+ x 3)) (lambda (x) (* x 2)))
Try to figure it out first! Then evaluate it.
3 curried-add
Develop the curried-add function. It takes a number ’a’ and returns a function that takes a number ’b’ and returns a+b. In other words, it has the type
(number -> (number -> number))
... where (t1 -> t2) is the type of a function that takes a t1 and produces a t2.
4 curry2
Develop the curry2 function; it takes a function of two arguments f, and produces a function that we’ll call M. The function M takes one argument and produces a function that we’ll call N. N takes one argument and produces the result of calling the input function f on the two given arguments. In other words, it has the type
(All (a b c) ((a b -> c) -> (a -> (b -> c))))
... for types a,b, and c. You will need lambda for this.
5 curry3
Develop the curry3 function; it takes a function of three arguments, and produces a function that takes one argument and produces a function that takes one argument and produces a function that takes one argument and produces the result of calling the input function on the three given arguments. In other words, it has the type
(All (a b c d) ((a b c -> d) -> (a -> (b -> (c -> d)))))
... for types a,b,c, and d. You will need lambda for this.
6 contains?
Develop the contains? function, that consumes a list and a symbol and returns true exactly when the symbol occurs in the list.
Use curry2 and contains? to develop in-list-many?, that consumes a source list of symbols and a list of query symbols, and returns a list of booleans indicating for the corresponding element of the query list whether it occurs in the source list. Use the built-in function map. This function should be a one-liner.
7 SMoL Tutorial
At this URL is a tutor that is designed to teach the basics of scope and environments. Do the first three sections. At the end of each section you will be prompted to save a PDF file of the completed tutor; do that! For lab credit, you should be prepared to show these three PDFs, in addition to the code you produced to solve the problems above.
Note that the easiest way to start the next section of the tutor is to reload the page. As a corollary to this, reloading the page will essentially force you to start over, so don’t do it until you’re finished with a section and have saved the corresponding PDF.