Dodając do wspaniałej odpowiedzi perimosocordiae, języki takie jak Haskell są tak proste, że pozwalają stworzyć nieskończoną listę nieskończonych list.
Pierwszy pozwala zdefiniować operatora, który wytwarza każdy kolejny rząd:
op :: [Integer] -> [Integer]
op = scanl1 (+)
Jak wyjaśnił perimosocordiae, to jest po prostu leniwy suma uruchomiony.
Musimy również przypadek bazowy:
tnBase :: [Integer]
tnBase = [0..]
Jak więc uzyskać nieskończoną listę liczb nieskończonych wykazów czworościennych? Mamy iteracji tej operacji w przypadku bazowego, a następnie wyjście wyprodukowane przez przypadek bazowy, to wyjścia ...
tn = iterate op tnBase
iterate
jest Preludium takie funkcje można znaleźć za pomocą hoogle i searching by name (jeśli masz dobre przypuszczenie) lub type signature (zazwyczaj znasz podpis potrzebnego ci). Source code jest zwykle połączony z haddock documentation.
Prezentacja
(w przypadku, gdy nie są wygodne z mapą, wziąć, kropli i głowy)
To wszystko jest dobrze, ale raczej bezużyteczny, jeśli nie wiem jak aby uzyskać pierwszą nieskończoną listę, aby zobaczyć drugą, trzecią itd.Istnieje wiele opcji, za to coraz konkretną listę można upuścić kilka pierwszych:
getNthTN n = head (drop n tn)
Pierwsze kilka pierwszych wyników każdej listy jest prawdopodobnie bardziej czego szukasz mimo:
printFirstFew n m = print $ take m (map (take n) tn)
Tutaj przyjmie pierwsze wartości n
z każdej listy liczb tetraedrycznych, podczas gdy take m
ograniczy nasze wyniki do pierwszych list m
.
I wreszcie, podoba mi się niesamowite groom pakiet dla szybkiego interaktywnej gry z danymi:
> groom $ take 10 (map (take 10) tn)
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45],
[0, 1, 4, 10, 20, 35, 56, 84, 120, 165],
[0, 1, 5, 15, 35, 70, 126, 210, 330, 495],
[0, 1, 6, 21, 56, 126, 252, 462, 792, 1287],
[0, 1, 7, 28, 84, 210, 462, 924, 1716, 3003],
[0, 1, 8, 36, 120, 330, 792, 1716, 3432, 6435],
[0, 1, 9, 45, 165, 495, 1287, 3003, 6435, 12870],
[0, 1, 10, 55, 220, 715, 2002, 5005, 11440, 24310],
[0, 1, 11, 66, 286, 1001, 3003, 8008, 19448, 43758]]
Dalsze informacje na temat dlaczego poprosiłem: Mam zestaw Buckyballs (http://www.getbuckyballs.com/) i odkryłem, że naprawdę lubią tworzyć pięciokątne bipyramidy (http://en.wikipedia.org/wiki/Pentagonal_bipyramid) z twarzami równobocznymi. Tak więc na podstawie odpowiedzi perimosocordiae, liczby "pięciobocznej bipyramidalnej" to 'scanl1 (+) (scanl1 (+) (1: map (* 5) [1 ..]))'. – jnylen