Pascal's triangle: Difference between revisions
Content added Content deleted
m (Moved to Arith cat) |
(add Clojure) |
||
Line 64: | Line 64: | ||
'(1) |
'(1) |
||
(cons (+ (car l) (cadr l)) (newrow (cdr l)))))</pre> |
(cons (+ (car l) (cadr l)) (newrow (cdr l)))))</pre> |
||
=={{header|Clojure}}== |
|||
For n < 1, prints nothing, returns nil. Copied from the Common Lisp implementation above, but with local functions and explicity tail-call-optimized recursion (recur). |
|||
(defn pascal [n] |
|||
(let [newrow (fn newrow [lst ret] |
|||
(if lst |
|||
(recur (rest lst) (conj ret (+ (first lst) (or (second lst) 0)))) |
|||
ret)) |
|||
genrow (fn genrow [n lst] |
|||
(when (< 0 n) |
|||
(do (println lst) |
|||
(recur (dec n) (conj (newrow lst []) 1)))))] |
|||
(genrow n [1]))) |
|||
(pascal 4) |
|||
=={{header|D}}== |
=={{header|D}}== |