「ほっ」と。キャンペーン

リボ払いは恐ろしい

カードローンでリボ払いというのがある。いくら借りても定額の返済しかしなくてもいいという便利なものだ。返済の仕組みはどうなっているかというと、たとえば、月の支払いが1万円、年利15%、借入50万円の場合、最初の返済は、まず利息が 500000 * 0.15 / 12 = 6250 で残りの 3750 円が元金の返済に当てられる。次の月は元金が3750円だけ減った分について同様の計算が行われる。

借り入れをしている最中にさらに買い物をしても、月々の返済額は変わらないので見過ごしがちだが、この方式では、借入金の額が多くなるに連れて利子の支払が膨れ上がることを知っておかなければならない。

そういうわけで、Haskell で計算してみた。

riritu = 0.15
siharai = 10000.0
risoku x = x * riritu / 12
zankin x = x - (siharai - risoku x)
zandaka_list x = zankin x : zandaka_list (zankin x)
siharai_kaisu x = length $ takeWhile (>0) (zandaka_list x)

上のプログラムで、引数Xには元金がはいる。利率は15%、月々の支払は1万円だ。関数 zandaka_list の引数に元金を与えると、月々の負債残高無限リストが作られる。負債残高が最初に負になってしまうとその後のデータは、借り入れが負になるのでへんな値になってしまうが、実際に使うのは負債残高が正の部分だけなので別に構わない。アバウトなプログラミングができるのが Haskell の特徴だ。siharai_kaisu の引数に借入額を入力すると、ローンの回数が計算できる。

借入金に対し、いくら返済しなければいけないかは、ローンの回数かける1万円なのですぐ分かる。このプログラムを実行してみたのが次の結果だ。

Main> siharai_kaisu 200000
23
Main> siharai_kaisu 300000
37
Main> siharai_kaisu 400000
55
Main> siharai_kaisu 500000
78

借入金が20万円だと、返済額は23万円で利息が3万円だが、50万円の借入金では、返済額が78万円で、実に28万円もの利息を支払わなくてはならないことになる。カードローン地獄はこのような仕組みで発生するのだろう。リボ払いの怖さを感じる。

この Haskell プログラムでは、IOモナドは全く使っていない。IOモナドを知らなくても、Haskell で日常的な疑問を調べてみることができることを示すいい例だ。


今日のHaskell
Main> takeWhile (<10) [1..]
[1,2,3,4,5,6,7,8,9]

リスト操作関数 takeWhile は第1引数の述語の値をTrue にする要素のリストを第二引数のリストから取り出す。述語の値がFalseになった時点以降のリストは切り捨てられる。
[PR]
by tnomura9 | 2010-11-13 13:57 | 話のネタ | Comments(0)
<< askForWords 英文のイメージ読解法 >>