Exercise2-38 <---> Exercise2-40

Exercise 2.39

Complete the following definitions of reverse (exercise 2.18) in terms of fold-right and fold-left from exercise 2.38:

(define (reverse sequence)
  (fold-right (lambda (x y) <??>) nil sequence))
(define (reverse sequence)
  (fold-left (lambda (x y) <??>) nil sequence))


Scheme solution:

(define (reverse sequence)
  (fold-right (lambda (x y) (append y (list x))) '() sequence))
(define (reverse sequence)
  (fold-left (lambda (x y) (cons y x)) '() sequence))

Haskell solution:

reverse sequence = foldr (\x y -> y ++ [x]) [] sequence

reverse sequence = foldl (\x y -> y : x) [] sequence

OCaml solution:

let reverse sequence = List.fold_right (fun x y -> y @ [x]) sequence []

let reverse sequence = List.fold_left (fun x y -> y :: x) [] sequence

Standard ML solution:

fun reverse sequence = foldr (fn (x, y) => y @ [x]) [] sequence

fun reverse sequence = foldl op :: [] sequence
(* equivalent to: foldl (fn (y, x) => y :: x) [] sequence *)

Exercise2-38 <---> Exercise2-40


Comments


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

Exercise2-39 (last edited 2009-03-24 06:00:58 by FirstnameLastname)