らでぃっくすを底としちゃうかもしれない その2.1

Lisp でやってもいいんだけど、めそどいので Haskell でやっとく。
Σを分かってる限りで Haskell っぽくするとこーなる:

summation f (x:xs) = (f x) + summation f xs

で前回やった series を使うと:

square x = x * x
summation (square) take(series(9 2) 45)

こんなんなって、このままだと無限に配列ができちゃうので take をつかう。
take は、簡単に言うと指定された数だけ配列を持ってくる関数。
上記では、とりあえず 45 個持ってくることにした。
ということで、Ruby で計算してみる:

r = 9
n = 2
summation = 0

ary = []

45.times do |i|
  answer = r ** (n + i)
  puts "#{r} ** #{(n + i).to_s.rjust(2)} = #{answer.to_s.rjust(50)}"
  ary << answer
end

ary.each do |it|
  summation += it
end

p summation

の結果:

9 **  2 =                                                 81
9 **  3 =                                                729
9 **  4 =                                               6561
9 **  5 =                                              59049
9 **  6 =                                             531441
9 **  7 =                                            4782969
9 **  8 =                                           43046721
9 **  9 =                                          387420489
9 ** 10 =                                         3486784401
9 ** 11 =                                        31381059609
9 ** 12 =                                       282429536481
9 ** 13 =                                      2541865828329
9 ** 14 =                                     22876792454961
9 ** 15 =                                    205891132094649
9 ** 16 =                                   1853020188851841
9 ** 17 =                                  16677181699666569
9 ** 18 =                                 150094635296999121
9 ** 19 =                                1350851717672992089
9 ** 20 =                               12157665459056928801
9 ** 21 =                              109418989131512359209
9 ** 22 =                              984770902183611232881
9 ** 23 =                             8862938119652501095929
9 ** 24 =                            79766443076872509863361
9 ** 25 =                           717897987691852588770249
9 ** 26 =                          6461081889226673298932241
9 ** 27 =                         58149737003040059690390169
9 ** 28 =                        523347633027360537213511521
9 ** 29 =                       4710128697246244834921603689
9 ** 30 =                      42391158275216203514294433201
9 ** 31 =                     381520424476945831628649898809
9 ** 32 =                    3433683820292512484657849089281
9 ** 33 =                   30903154382632612361920641803529
9 ** 34 =                  278128389443693511257285776231761
9 ** 35 =                 2503155504993241601315571986085849
9 ** 36 =                22528399544939174411840147874772641
9 ** 37 =               202755595904452569706561330872953769
9 ** 38 =              1824800363140073127359051977856583921
9 ** 39 =             16423203268260658146231467800709255289
9 ** 40 =            147808829414345923316083210206383297601
9 ** 41 =           1330279464729113309844748891857449678409
9 ** 42 =          11972515182562019788602740026717047105681
9 ** 43 =         107752636643058178097424660240453423951129
9 ** 44 =         969773729787523602876821942164080815560161
9 ** 45 =        8727963568087712425891397479476727340041449
9 ** 46 =       78551672112789411833022577315290546060373041
88370631126888088312150399479701864317919661

どっかの RPG の経験値ですね、わかります。