; 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))