Project Euler 67 - Maximum Sum in Triangle

I did this Project Euler problem a few years ago while learning Lisp.

Problem #67 Description

The challenge is to calculate the maximum sum available in a 100-row triangle by, starting at the top, adding the numbers as you move down the triangle to numbers adjacent to the current position. Because of the large number of possible routes to the bottom of the triangle, a brute force solution was not possible.

(defun best-of-rows (top bottom)
  (setf bestrow nil)
  (do ((i 0 (+ i 1)))
      ((null (nth i top)) bestrow)
    (setf bestrow (append bestrow (list
				(+ (nth i top)
				   (max (nth i bottom)
					(nth (+ 1 i) bottom))))))))

(defun build-triangle-row (triangle row)
  (if (null (nth (+ row 1) triangle)) (nth row triangle)
      (best-of-rows (nth row triangle)
		    (build-triangle-row triangle (+ row 1)))))