CS245: Principles of Programming Languages, Assignment #2

Douglas Blank
Fall 2008

Assignment #2: due Thursday Sept 25, 2008 in class

  1. Write the function filter that works like:
    > (define lessthan10
         (lambda (n)
           (< n 10))))
    > (filter lessthan10 '(1 7 6 10 15 2 9 20))
    (1 7 6 2 9)
    > (filter (lambda (n) (not (lessthan10 n))) '(1 7 6 10 15 2 9 20))
    (10 15 20)
    

  2. Write the function let*->lambda that works like:
    > (let*->lambda '(let* () 1))
    1
    > (let*->lambda '(let* ((a 42)) 1))
    ((lambda (a) 1) 42)
    > (let*->lambda '(let* ((a 42)) a))
    ((lambda (a) a) 42)
    > (let*->lambda '(let* ((a 42)(b 43)) a))
    ((lambda (a) ((lambda (b) a) 43)) 42)
    > (let*->lambda '(let* ((a 42)(b 43)) (+ a b)))
    ((lambda (a) ((lambda (b) (+ a b)) 43)) 42)
    > (let*->lambda '(let* ((a 42)(b (* a 10))) (+ a b)))
    ((lambda (a) ((lambda (b) (+ a b)) (* a 10))) 42)
    > (let*->lambda '(let* ((a 42)(b (* a 10))) (let* ((c 1)) (+ a b c))))
    ((lambda (a) ((lambda (b) ((lambda (c) (+ a b c)) 1)) (* a 10))) 42)