Exercise1-29 <---> Exercise1-31

Exercise 1.30

The sum procedure above generates a linear recursion. The procedure can be rewritten so that the sum is performed iteratively. Show how to do this by filling in the missing expressions in the following definition:

(define (sum term a next b)
  (define (iter a result)
    (if <??>
        <??>
        (iter <??> <??>)))
  (iter <??> <??>))


Ru: Процедура sum порождает линейную рекурсию. Ее можно переписать так, чтобы суммирование выполнялось итеративно. Покажите, как сделать это, заполнив пропущенные выражения в следующем определении:

(define (sum term a next b)
  (define (iter a result)
    (if <??>
        <??>
        (iter <??> <??>)))
  (iter <??> <??>))


Scheme solution:

(define (sum term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter 
         (next a) 
         (+ result (term a)))))
  (iter a 0))

Haskell solution:

sum term a next b = iter a 0
  where
    iter a result | a > b     = result
                  | otherwise = iter (next a) (result + term a)

OCaml solution: (version for floats)

let sum term a next b =
  let rec iter a result =
    if a > b then
      result
    else
      iter (next a) (result +. term a)
  in
    iter a 0.

Standard ML solution: (version for reals)

fun sum (term, a, next, b) = let
  fun iter (a, result) =
    if a > b then
      result
    else
      iter (next a, result + term a)
in
  iter (a, 0.0)
end

Exercise1-29 <---> Exercise1-31


Comments


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

Exercise1-30 (last edited 2009-03-24 02:23:00 by FirstnameLastname)