数がきれいに並んでいるものに、等差数列と等比数列がある。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を定義しなさい。