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