Very nice guys !!!
While I was sleeping, you were not...
So, not so many place left for LISP solutions.
Here's one using another algorithm to avoid using append.
(defun pascalTriangle (n / f1 f2)
(defun f1 (l n)
(if (< 0 n)
((lambda (x)
(cons (cons 1 x) (f1 x (1- n)))
)
(f2 (cons 1 l))
)
)
)
(defun f2 (l)
(if (cdr l)
(cons (+ (car l) (cadr l)) (f2 (cdr l)))
'(1)
)
)
(cons '(1) (f1 nil n))
)
(defun pascalRow (n / f1 f2)
(defun f1 (l n)
(if (< 0 n)
(f1 (f2 (cons 1 l)) (1- n))
(cons 1 l)
)
)
(defun f2 (l)
(if (cdr l)
(cons (+ (car l) (cadr l)) (f2 (cdr l)))
'(1)
)
)
(f1 nil n)
)
And a F# one (the first one uses an infinite lazy sequence)
let pascalTriangle n =
let foo l = List.map2 (+) (0 :: l) (List.append l [0])
Seq.unfold (fun l -> Some(l, foo l)) [1] |> Seq.take (n + 1) |> Seq.toList
let pascalRow n =
let foo l = List.map2 (+) (0 :: l) (List.append l [0])
List.fold (fun l i -> foo l) [1] [1 .. n]