bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

数を整然と並べる

数がきれいに並んでいるものに、等差数列と等比数列がある。Haskellで記述する。

1.等差数列

等差数列は、各項の差が同じものをいう。例えば、奇数を小さい方から大きい方に並べると1.3.5.7…となるが、これは、最初の値(初期値)が1、差が2の等差数列である。初期値(init)と等差(dif)を与えることで、等差数列を作り出す関数arithmeticを定義する。

arithmetic init dif = [init, (init + dif)..]

これが正しいことを確かめる。

take 10 $ arithmetic 1 2

からは
[1,3,5,7,9,11,13,15,17,19]
を得る。

take 10 $ arithmetic (-1) (-2)

からは
[-1,-3,-5,-7,-9,-11,-13,-15,-17,-19]
を得る。

2.等比数列

等比数列は、各項の比が同じものをいう。例えば、1,1/4,1/16,1/64..である。等差数列と同じように、初期値(init)と等比(rat)を与えることで、等比数列を作り出す関数geometricを定義する。

geometric init rat = zipWith (*) (repeat init) $ map (\x -> a^x) [0,1..]

正しい数列が出力されることを確かめる。

take 10 $ geometric 4 0.5

を与えると、
[4.0,2.0,1.0,0.5,0.25,0.125,6.25e-2,3.125e-2,1.5625e-2,7.8125e-3]
を得る。

3.問題

関数\(y= x^2\)は、\(x\)を0,1,2,3,..と変化させてゆくと、\(y\)は、0,1,4,9,..と変化する。隣り合う自然数での差は
\(x^n-x^{n-1} =(n + (n-1)) \times (n – (n – 1) = 2 \times n -1\)
である。即ち、1,3,5,..で、奇数の列となっている。従って、\(y\)の数列は、初期値(init)を1とし、差(dif)が、初期値1、差2の等差数列である。そこで、この数列を表す関数arithmetic1を定義しなさい。

4.問題

上記を一般化し、初期値(init)と、差(dif)が初期値\(a\)、等差\(b\)で与えられた数列を表す関数arithmetic2を定義しなさい。

5.問題

上記問題で、差が等差ではなく等比で与えられた数列geometric1を定義しなさい。