(sicp?)pascalの三角形がつくれた
schemeでもできた。
(define (pascal n) (define (iter seq) (if (null? (cdr seq)) '() (cons (+ (car seq) (cadr seq)) (iter (cdr seq))))) (define (make n seq) (if (= n 0) seq (append seq (map iter (map (lambda (x) (append '(0) x '(0))) (make (- n 1) seq)))))) (make n '((1))))
(for-each print (pascal 9)) ;;(1) ;;(1 1) ;;(1 2 1) ;;(1 3 3 1) ;;(1 4 6 4 1) ;;(1 5 10 10 5 1) ;;(1 6 15 20 15 6 1) ;;(1 7 21 35 35 21 7 1) ;;(1 8 28 56 70 56 28 8 1) ;;(1 9 36 84 126 126 84 36 9 1)
追記
こっちの方が効率良いかも
(define (pascal n) (define (iter seq) (if (null? (cdr seq)) '() (cons (+ (car seq) (cadr seq)) (iter (cdr seq))))) (define (pre-iter seq) (append '(0) seq '(0))) (define (make result n) ;(print (car result)) (if (= n 0) (reverse result) (make (cons (iter (pre-iter (car result))) result) (- n 1)))) (make '((1)) n))