人気ブログランキング | 話題のタグを見る

年号西暦変換

年号を西暦に変換するプログラムを作ってみた。明治、大正、昭和、平成の違いは case ~ of を使ったパターンマッチで処理した。また、年の文字列を数値に変換するのには read 関数を使った。ちょっと使っていないとこんな簡単なコツも忘れてしまう。

Prelude> :set editor vi
Prelude> :e fromNengo.hs
Ok, modules loaded: none.
Prelude> :l fromNengo.hs
[1 of 1] Compiling Main ( fromNengo.hs, interpreted )
Ok, modules loaded: Main.
*Main> fromNengo "h27"
2015
*Main> fromNengo "t12"
1923


fromNengo のソースは次のようになる。


fromNengo :: String -> Integer
fromNengo xs =
  case (xs) of
    ('m':year) -> 1867 + (read year :: Integer)
    ('t':year) -> 1911 + (read year :: Integer)
    ('s':year) -> 1925 + (read year :: Integer)
    ('h':year) -> 1988 + (read year :: Integer)


fromNego を ghc でコンパイルしてターミナルから実行できるようにしたくなったので。fromNengo.hs のソースファイルを次のように変更した。


import System.Environment

main = do
  nengo <- getArgs
  print $ fromNengo $ head nengo

fromNengo :: String -> Integer
fromNengo xs =
  case (xs) of
    ('m':year) -> 1867 + (read year :: Integer)
    ('t':year) -> 1911 + (read year :: Integer)
    ('s':year) -> 1925 + (read year :: Integer)
    ('h':year) -> 1988 + (read year :: Integer)


ソースファイルのコンパイルは次のようになる


$ ghc -o fromNengo fromNengo.hs
$ ./fromNengo t12
1923



by tnomura9 | 2015-08-09 13:41 | Haskell | Comments(0)
<< 実無限と可能無限 Haskell でパスワードを作る >>