Pascalsches Dreieck

Das Pascalsche Dreieck ist eine Anordnung von Zahlen, mit einer Zahl in der ersten Zeile, zwei Zahlen in der zweiten Zeile und so fort. Jede Zahl ist über dem Zwischenraum zweier benachbarter Zahlen der nächsttieferen Zeile angeordnet. Jede nicht am Rand des Dreiecks angeordnete Zahl ist die Summe der nächstgelegenen beiden Zahlen aus der nächsthöheren Zeile. Alle Zahlen am Rand sind 1.

    1
   1 1
 1 2 1
1 3 3 1

Die Hilfsfunktion sum-pairs liefert für eine Liste die Summen jeweils zwei benachbarter Elemente. Die Eingabe muss eine Liste mit mindestens zwei Zahlen sein.

(defproc sum-pairs (l)
  (zip-with add (rest l) (butlast l)))

Mit dieser Hilfsfunktion wird die Definition der Funktion pascal einfach. Für die Eingabe 1 liefert sie die Liste (1), für die Eingabe 2 die Liste (1 1). Für größere Eingaben ruft sie sich mit einem um eins verminderten Argument selbst auf, wendet sum-pairs auf das Ergebnis des rekursiven Aufrufs an und hängt vorne und hinten eine 1 an das Ergebnis von sum-pairs.

(defproc pascal (n)
  (cond
    ((not (integer? n))
      (throw (quote error) "argument of pascal must be an integer"))
    ((< n 0)
      (throw (quote error) "argument of pascal must be 0 or greater"))
    ((= n 0)
      (list 1))
    ((= n 1)
      (list 1 1))
    (t
      (append
        (list 1)
        (sum-pairs (pascal (- n 1)))
        (list 1)))))

Die Ergebnisse für die Ausdrücke (pascal 0) bis (pascal 14) sind die folgenden:

(1)
(1 1)
(1 2 1)
(1 3 3 1)
(1 4 6 4 1)
(1 5 10 10 5 1)
(1 6 15 20 15 6 1)
(1 7 21 35 35 21 7 1)
(1 8 28 56 70 56 28 8 1)
(1 9 36 84 126 126 84 36 9 1)
(1 10 45 120 210 252 210 120 45 10 1)
(1 11 55 165 330 462 462 330 165 55 11 1)
(1 12 66 220 495 792 924 792 495 220 66 12 1)
(1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1)
(1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1)

Die Funktionen sind in der unten verlinkten Datei pascal.sheet.xml enthalten. Diese Datei kann mit dem Programm Calc ausgeführt werden.


pascal.sheet.xml