pascalの三角形
昔は、こんな風に作ってた。
でも、この方があとで見たとき分かりやすいような気がする。
(明示的な再帰を避けるとあとで読みやすいのかもしれない)
(define (shift-left seq) (cons 0 seq)) (define (shift-right seq) (reverse (shift-left seq))) (define (adjoin seq) (map + (shift-left seq) (shift-right seq))) (define (pascal n) (reverse (fold (lambda (x rest) (cons (adjoin (car rest)) rest)) '((1)) (iota n)))) (for-each print (pascal 10)) ;;gosh> (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) ;; (1 10 45 120 210 252 210 120 45 10 1)