paper-a-size01 は途中に使う関数。
(define paper-a-size01 (lambda (sl) (cons (truncate (/ (cdr sl) 2)) (car sl)))) (define paper-a-size (lambda (n) (if (= 0 n) (cons 841 1189) (paper-a-size01 (paper-a-size (- n 1)))))) |
下記は、途中に使う関数を内部に移したもの。
(define paper-a-size (lambda (n) (if (= 0 n) (cons 841 1189) ((lambda (sl) (cons (truncate (/ (cdr sl) 2)) (car sl))) (paper-a-size-b (- n 1)))))) |
add-next とその改造版の add-next2 を見くらべてみよう。
add-next2 ができれば、pascal-list は簡単だろう。
pascal-list では、cons を使わずに、append を使う方法や、add-next2 を使わずに add-next を使う方法がある。
length を使わずに、null? を使う方法もある。
(define add-next (lambda (lst) (if (< (length lst) 2) (list ) (cons (+ (car lst) (car (cdr lst))) (add-next (cdr lst)))))) (define add-next2 (lambda (lst) (if (= (length lst) 1) lst (cons (+ (car lst) (car (cdr lst))) (add-next2 (cdr lst)))))) (define pascal-list (lambda (n) (if (= 1 n) (list 1 1) (cons 1 (add-next2 (pascal-list (- n 1))))))) |