第1種スターリング数とパスカルの三角形

第1種スターリング数とパスカルの三角形も第2種スターリング数と同様に書ける。この形式ではパスカルの三角形が最も基本的な形になるだろう。

(defun stirling-1st-kind-line (&optional lst)
  (do ((1-n (- 1 (length lst)))
       (b lst (cdr b))
       (x 0 (car b))
       (l nil (append (list (+ x (* 1-n (car b)))) l)))
      ((null b) (append (reverse l) (list 1)))))

(defun stirling-1st-kind (n k)
  (do ((i -1 (1+ i))
       (b nil (stirling-1st-kind-line b)))
       ((<= n i) (or (elt b k) 0))))

(let ((tb (make-hash-table :size 47))
      (max 0))
  (defun stirling-1st-kind-m (n k)
    (while (<= max n)
      (setf (gethash max tb)
            (stirling-1st-kind-line (gethash (1- max) tb)))
      (incf max))
    (or (elt (gethash n tb) k) 0)))


(defun pascal-triangle-line (&optional lst)
  (do ((b lst (cdr b))
       (x 0 (car b))
       (l nil (append (list (+ x (car b))) l)))
      ((null b) (append (reverse l) (list 1)))))

(defun pascal-triangle (n k)
  (do ((i -1 (1+ i))
       (b nil (pascal-triangle-line b)))
       ((<= n i) (or (elt b k) 0))))

(let ((tb (make-hash-table :size 47))
      (max 0))
  (defun pascal-triangle-m (n k)
    (while (<= max n)
      (setf (gethash max tb)
            (pascal-triangle-line (gethash (1- max) tb)))
      (incf max))
    (or (elt (gethash n tb) k) 0)))