Hatena::Grouphaskell

すばらしき functional programming

2008-08-05合理的な預かり金額(Part5)

ジンバブエは、最近そのすさまじいインフレで日本でもニュースに登場しています。年率220万%というすごさだとか。1000億ジンバブエドル札も発券されましたが、パン1斤は7月30日現在、2000億ジンバブエドル(以下、ZWD, $)だそうです。

このようなハイパーインフレは、何も生産することができないような国情という、単なる経済問題ではない生活の破壊を反映した現象です。エイズの蔓延のため平均寿命は30歳代、政治も3月下旬に行われた大統領選挙の結果が5月下旬まで公表されず、再選挙となるも野党候補は襲撃迫害を恐れて決選投票を辞退せざるをえませんでした。めちゃくちゃです。

ところで、デノミです。デノミとは、貨幣の呼び方を変えること。たとえばいままで100円と表現していたものの価値を1円と言い換えることです。うまい棒は10銭になります。月給は3000円とかでしょうか。日本には決済金額としての100分の1単位通貨がありませんから、デノミを行ってもドルやユーロなどの主要通貨と桁がそろっていいかもしれません。とくに利点は思い浮かびませんが…。

ジンバブエでは、ATMがあまりの高額紙幣を扱いきれなくなりそうなため、8月1日に100億分の1に呼び方を変えるデノミを行い、ジンバブエ準備銀行(中央銀行)は新しい紙幣を発行しました。ウェブサイトによると、新しい紙幣硬貨は $500紙幣, $100紙幣, $25硬貨, $20紙幣, $10紙幣と$10硬貨、$5紙幣と$5硬貨、$2硬貨、$1紙幣と$1硬貨、50セント, 20セント, 10セントの硬貨*1だそうです。

で、預かり金の問題に戻ります。

$31の買い物のときに、$41を出しました。$20紙幣2枚と、$1紙幣です。$10のお釣をもらうことを期待した、合理的な預かり金です。ところが、これを第1版のアルゴリズムにかけると、

Main> unfold 41 [500, 100, 25, 20, 10, 5, 2, 1]
[25,10,5,1]

預かり金の中に$10が含まれていると計算され、$10のお釣に対して合理的な預かり金ではなくなってしまいます。さて、どうしましょう。

[つづく...]

*1:本稿では100分の1通貨単位 -セント- を扱いません。あしからず