summaryrefslogblamecommitdiffstats
path: root/one/twelve.scm
blob: 39c3d8b07465de4c16a9b9eef7915ea6b285d3ed (plain) (tree)





























                                                       
;;;; Under Creative Commons Attribution-ShareAlike 4.0
;;;; International. See
;;;; <https://creativecommons.org/licenses/by-sa/4.0/>.

;;; pascal's fucking triangle.

(define-module (one twelve)
  #:export (compute-triangle
            compute-line
            display-line
            value-at))

(define (compute-triangle n)
  (cond ((= n 1) (list (compute-line n 1)))
        (else (cons (compute-line n 1)
                    (compute-triangle (- n 1))))))

(define (compute-line n pos)
  (cond ((> pos n) '())
        (else
         (cons (value-at n pos)
               (compute-line n (+ pos 1))))))

(define (value-at line pos)
  (cond ((= line 1) 1)
        ((= pos 1) 1)
        ((= line pos) 1)
        (else (+
               (value-at (- line 1) (- pos 1))
               (value-at (- line 1) pos)))))