Floyd's triangle   lists the natural numbers in a right triangle aligned to the left where

 the first row is   1     (unity)
 successive rows start towards the left with the next number followed by successive naturals listing one more number than the line above.


The first few lines of a Floyd triangle looks like this:

 1
 2  3
 4  5  6
 7  8  9 10
11 12 13 14 15



Task

 Write a program to generate and display here the first   n   lines of a Floyd triangle. 
(Use   n=5   and   n=14   rows).
 Ensure that when displayed in a mono-space font, the numbers line up in vertical columns as shown and that only one space separates numbers of the last row.


;;;using flet to define local functions and storing precalculated column widths in array
;;;verbose, but more readable and efficient than version 2
 
(defun floydtriangle (rows)
       (let (column-widths)
         (setf column-widths (make-array rows :initial-element nil))
           (flet (
             (lazycat (n)
              (/ (+ (expt n 2) n 2) 2))
             (width (v)
              (+ 1 (floor (log v 10)))))
            (dotimes (i rows)
             (setf (aref column-widths i)(width (+ i (lazycat (- rows 1))))))
            (dotimes (row rows)
             (dotimes (col (+ 1 row))
               (format t "~vd " (aref column-widths col)(+ col (lazycat row))))
             (format t "~%")))))