ひつじが一匹

最近不眠症ぎみなので、羊を数えるプログラムを作ってみた。Sheep という新しいデータ型を定義するには data 宣言を行う。data 宣言のあとに来るのが型コンストラクタで、data 宣言文の = の右側に来るのがデータ・コンストラクタだ。新しい型を定義してもそのままでは show 関数で表示可能な文字列に変換できない。show 関数をオーバーライドして定義するのが面倒くさい時はとりあえず deriving を使っておくと良い。

羊をかぞえるプログラム(sheep.hs)
data Sheep = Sheep
  deriving (Show)

sheep = Sheep:sheep

実行例:
Main> take 10 sheep
[Sheep,Sheep,Sheep,Sheep,Sheep,Sheep,Sheep,Sheep,Sheep,Sheep]

しかし、show 関数でデータを文字列に変換する時に自前のものを使いたいときは、instance 宣言文を作る。Sheep 型を Show クラスのインスタンスとして登録し、show 関数をオーバーライドして定義する。

羊をかぞえるプログラム(sheep2.hs)
data Sheep = Sheep

instance Show Sheep where
  show Sheep = "(^o^)"

sheep = Sheep:sheep

実行例:
Main> take 10 sheep
[(^o^),(^o^),(^o^),(^o^),(^o^),(^o^),(^o^),(^o^),(^o^),(^o^)]

ユーザ定義のデータ型をつくるときは、deriving (Show) か instance Show Sheep where .. でデータを表示可能に設定しておかなければならない。
[PR]
by tnomura9 | 2009-09-13 22:33 | Haskell | Comments(0)
<< 国家予算 Dun Eideann >>