; catalan triangle
(define (next-row xs)
(let loop ((xs (cdr xs)) (ys (list 1)))
(if (null? xs) (reverse (cons (car ys) ys))
(loop (cdr xs) (cons (+ (car xs) (car ys)) ys)))))
(define (catalan-triangle n)
(let loop ((n n) (xs (list (list 1))))
(if (zero? n) (reverse xs)
(loop (- n 1) (cons (next-row (car xs)) xs)))))
(display (catalan-triangle 8))
OyBjYXRhbGFuIHRyaWFuZ2xlCgooZGVmaW5lIChuZXh0LXJvdyB4cykKICAobGV0IGxvb3AgKCh4cyAoY2RyIHhzKSkgKHlzIChsaXN0IDEpKSkKICAgIChpZiAobnVsbD8geHMpIChyZXZlcnNlIChjb25zIChjYXIgeXMpIHlzKSkKICAgICAgKGxvb3AgKGNkciB4cykgKGNvbnMgKCsgKGNhciB4cykgKGNhciB5cykpIHlzKSkpKSkKCihkZWZpbmUgKGNhdGFsYW4tdHJpYW5nbGUgbikKICAobGV0IGxvb3AgKChuIG4pICh4cyAobGlzdCAobGlzdCAxKSkpKQogICAgKGlmICh6ZXJvPyBuKSAocmV2ZXJzZSB4cykKICAgICAgKGxvb3AgKC0gbiAxKSAoY29ucyAobmV4dC1yb3cgKGNhciB4cykpIHhzKSkpKSkKCihkaXNwbGF5IChjYXRhbGFuLXRyaWFuZ2xlIDgpKQ==