(import (srfi 25)) (define-syntax dotimes (syntax-rules () ((_ (i n) body ...) (do ((i 0 (+ i 1))) ((>= i n)) body ...)))) (define (pascal-upper n) (let ((p (make-array (shape 0 n 0 n) 0))) (dotimes (i n) (array-set! p 0 i 1)) (dotimes (i (- n 1)) (dotimes (j (- n 1)) (array-set! p (+ 1 i) (+ 1 j) (+ (array-ref p i j) (array-ref p (+ 1 i) j))))) p)) (define (pascal-lower n) (let ((p (make-array (shape 0 n 0 n) 0))) (dotimes (i n) (array-set! p i 0 1)) (dotimes (i (- n 1)) (dotimes (j (- n 1)) (array-set! p (+ 1 i) (+ 1 j) (+ (array-ref p i j) (array-ref p i (+ 1 j)))))) p)) (define (pascal-symmetric n) (let ((p (make-array (shape 0 n 0 n) 0))) (dotimes (i n) (array-set! p i 0 1) (array-set! p 0 i 1)) (dotimes (i (- n 1)) (dotimes (j (- n 1)) (array-set! p (+ 1 i) (+ 1 j) (+ (array-ref p (+ 1 i) j) (array-ref p i (+ 1 j)))))) p)) (define (print-array a) (let ((r (array-end a 0)) (c (array-end a 1))) (dotimes (row (- r 1)) (dotimes (col (- c 1)) (display (array-ref a row col)) (display #\space)) (newline))))