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)))))))
|