(define (int-gen n m) (if (> n m) (list) (cons n (int-gen (+ n 1) m)))) (define (int-gen2-iter n m result) (if (> n m) result (int-gen2-iter n (- m 1) (cons m result)))) (define (int-gen2 n m) (int-gen2-iter n m (list))) (int-gen 3 10) (int-gen2 3 10)
実は、もうちょっとあとで、こんな事も出来る事を教えます。(define (int-list-operator expr keyword) (if (null? expr) (cond ((eq? keyword 'sum) 0) ((eq? keyword 'product) 1)) (cond ((eq? keyword 'sum) (+ (car expr) (int-list-operator (cdr expr) keyword))) ((eq? keyword 'product) (* (car expr) (int-list-operator (cdr expr) keyword)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (int-list-operator2 expr keyword) (cond ((eq? keyword 'sum) (sumup-list expr)) ((eq? keyword 'product) (product-list expr)))) (define (sumup-list expr) (if (null? expr) 0 (+ (car expr) (sumup-list (cdr expr))))) (define (product-list expr) (product-list-iter expr 1)) (define (product-list-iter expr result) (if (null? expr) result (product-list-iter (cdr expr) (* result (car expr)))))
(define (int-list-operator3 expr keyword) (cond ((eq? keyword 'sum) (apply + expr)) ((eq? keyword 'product) (apply * expr))))
99.10.5/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp