Using fold-list, develop a procedure concatenate that takes a
list of strings as its argument and constructs and returns one long string
formed by appending together all of the list elements. Here is one sample
call (you'll want to write others):
> (concatenate '("alpha" "beta" "gamma" "delta"))
"alphabetagammadelta"
Determine and explain the effect of the procedure mystery-1,
defined below, which takes any list as its argument.
(define mystery-1
(fold-list (list '())
(lambda (new recursive-result)
(append recursive-result
(map (left-section cons new)
recursive-result)))))
Determine and explain the effect of the procedure mystery-2,
defined below, which takes any list of digit characters as its argument.
(define mystery-2
(tail-fold-list 0 (lambda (new so-far)
(+ (* 10 so-far)
(- (char->integer new)
(char->integer #\0))))))
Using the appropriate higher-order procedure from the reading, concisely
define the wrap procedure described in exercise 7 of the lab on recursion with
integers.
In the reading, we saw that (tail-fold-list '() cons) is the reverse procedure. What does (fold-list '() cons) do?
Using fold-natural, define and test a procedure harmonic that
takes any natural number n and returns the nth harmonic number, which is the sum of the reciprocals of the positive
integers less than or equal to n. (For instance, the fourth
harmonic number is 1/1 + 1/2 + 1/3 + 1/4, or 25/12.)
Determine and explain the effect of the procedure mystery-3, defined
below, which takes any string as its argument.
(define mystery-3
(lambda (str)
((tail-fold-natural '() (lambda (new so-far)
(cons (string-ref str (- new 1))
so-far)))
(string-length str))))
Give an example of a binary procedure proc for which ((fold-natural 0 proc) 5) and ((tail-fold-natural 0 proc) 5) have
different values.
I am indebted to Professor Ben Gum for his contributions to the development of this lab.