Exercise1-40 <---> Exercise1-42

Exercise 1.41

Define a procedure double that takes a procedure of one argument as argument and returns a procedure that applies the original procedure twice. For example, if inc is a procedure that adds 1 to its argument, then (double inc) should be a procedure that adds 2. What value is returned by

(((double (double double)) inc) 5)


Scheme solution:

(define (double f)
 (lambda (x) (f (f x))))

(((double (double double)) inc) 5)
21


Haskell solution:

inc = (+1)
double f = f . f

Prelude> ((double (double double)) inc) 5
21


OCaml solution:

let inc = succ
let double f x = f (f x)

# ((double (double double)) inc) 5;;
- : int = 21


Standard ML solution:

fun inc x = x + 1
fun double f x = f (f x)

- ((double (double double)) inc) 5;
val it = 21 : int

Exercise1-40 <---> Exercise1-42


Comments


:) :)) :( ;) :\ |) X-( B) Markup

Exercise1-41 (last edited 2009-03-24 02:47:45 by FirstnameLastname)