26 lines
836 B
Racket
26 lines
836 B
Racket
#lang racket
|
|
(require math/number-theory)
|
|
|
|
(define (pascal-upper-matrix n)
|
|
(for/list ((i n)) (for/list ((j n)) (j . binomial . i))))
|
|
|
|
(define (pascal-lower-matrix n)
|
|
(for/list ((i n)) (for/list ((j n)) (i . binomial . j))))
|
|
|
|
(define (pascal-symmetric-matrix n)
|
|
(for/list ((i n)) (for/list ((j n)) ((+ i j) . binomial . j))))
|
|
|
|
(define (matrix->string m)
|
|
(define col-width
|
|
(for*/fold ((rv 1)) ((r m) (c r))
|
|
(if (zero? c) rv (max rv (+ 1 (order-of-magnitude c))))))
|
|
(string-append
|
|
(string-join
|
|
(for/list ((r m))
|
|
(string-join (map (λ (c) (~a #:width col-width #:align 'right c)) r) " ")) "\n")
|
|
"\n"))
|
|
|
|
(printf "Upper:~%~a~%" (matrix->string (pascal-upper-matrix 5)))
|
|
(printf "Lower:~%~a~%" (matrix->string (pascal-lower-matrix 5)))
|
|
(printf "Symmetric:~%~a~%" (matrix->string (pascal-symmetric-matrix 5)))
|