2009年8月9日日曜日

Erlang 復習 2

Erlang ディレクトリのlib 下の、各ライブラリのディレクトリ配下に、いろんなライブラリのドキュメントがあるのに今さっき気付いた。lists モジュールで見つけた zipwith と sum を使って消費者物価指数を求めてみる。
1993年1994年
価格(円)数量(ml)価格(円)数量(ml)
清酒89.211371389.8812986
焼酎65.95503063.875799
ビール54154990534.7961770
輸入ウィスキー414.26185374.04166
国産ウィスキー248.191476238.751651
ぶどう酒145.21773127.41024
上表のデータは『データ分析 はじめの一歩』に載っていた古い総務庁の家計調査のデータを拝借したもの。ここで 1993 年のデータを基準とし94年の消費者物価指数(CPI)を求めてみる。
-module(t2).
-compile(export_all).

%% cpi(Base, Target, Weight)->CPI
%% 消費者物価指数を求める
%%
%% Base = 基準期間の物価のリスト
%% Target = 算出対象期間の物価のリスト
%% Weight = 数量。ラスパイレスなら基準期間、パーシェなら対象期間
%% CPI 計算結果
cpi(Base, Target, Weight)->
  mul_each_and_sum(Target, Weight)/mul_each_and_sum(Base, Weight) * 100.

%% 二つの同要素数リストの各要素を掛け合わせ、合計を返す
mul_each_and_sum(List1, List2)->
  lists:sum(lists:zipwith(fun(X,Y)->X*Y end, List1, List2)).
上のようなコードを書いて以下のように実行した。5>に続く出力がラスパイレス型、6>に続く出力がパーシェ型のCPI。教科書どおりの値が得られた。
1> Pk0=[89.21, 65.95, 541, 414.26, 248.19, 145.21].
[89.21,65.95,541,414.26,248.19,145.21]
2> Qk0=[13713, 5030, 54990, 185, 1476, 773].
[13713,5030,54990,185,1476,773]
3> Pkt=[89.88, 63.87, 534.79, 374.04, 238.75, 127.4].
[89.88,63.87,534.79,374.04,238.75,127.4]
4> Qkt=[12986, 5799, 61770, 166, 1651, 1024].
[12986,5799,61770,166,1651,1024]
5> t2:cpi(Pk0, Pkt, Qk0).
98.81385620633323
6> t2:cpi(Pk0, Pkt, Qkt).
98.79880915150264

0 件のコメント:

コメントを投稿