金融工学の計算(1)〜ディスカウントファクター(DF):Haskell編その1

まずは前々回前回のおさらいを。

 t 年のDFは、 リスクフリー金利 r とすると、
 DF = \frac{PV}{FV} = \frac{1}{(1+r)^t}
と表せます。

また、Rubyでその内容を表すと、
df.rb

def df(r, t)
  1 / (1 + r) ** t
end

となります。

そのテストは、前回の丸めるメソッドを使うと、
df_test.rb

require 'test/unit'
require 'df'
require 'util'
class DfTest < Test::Unit::TestCase
  def test_df
    assert_equal(1, df(0.1, 0))  # 現在のDFは1となるはず
    assert_equal(0.990099009.round_to(8), df(0.01, 1).round_to(8)) # ここが新しい
  end
end

と、修正できます。

それでは、今回はHaskellで、このDFを表す式を書いてみましょう。
Haskellの処理系GHCのインストール方法は、このエントリーを参考にしてください。

・・・と、簡単にこのくらいの式書けるだろう、と思ったんですが、コマンドラインから引数を取得するところではまってしまいました。。とりあえず、引数の取得は「getArgs」で取れるのはわかったので、そこまでやってみます。

df_args.hs

import System

main :: IO ()
main = do args <- getArgs
          putStrLn $ concat args

実行結果はこうなりました。(とりあえずインタプリタ実行)

$ runghc df_args.hs 1.0 2.0
1.02.0

やっぱり、慣れない言語は難しいですね。少しづつ進めていきます。