; - Program 9.21, pg. 283 - (define add1 (lambda (n) (+ 1 n))) (define vector-generator ; TYPE: (-> (-> (natural) T) ; (-> (natural) (vector T)) (lambda (gen-proc) (lambda (size) ; ENSURES: result is a new vector of elements indexed 0...size-1 ; such that the ith element is (gen-proc i). Note that the calls ; to gen-proc are made in order from 0 to size-1. (let ((vec (make-vector size))) (letrec ((loop ; TYPE: integer -> void (lambda (i) ; REQUIRES: 0 <= i <= size and for all 0 <= j < i, ; (vector-ref vec j) = (gen-proc j) ; MODIFIES: vec ; EFFECT: initialize indexes i up to size-1 (if (< i size) (begin (vector-set! vec i (gen-proc i)) (loop (add1 i))))))) (loop 0)) vec))))