のびのびなHaskell日記

2006-07-10

「フツケル」131頁から134の学習

整数

  • Int型とInteger型

Haskell整数型にはInt型とInteger型の二種類ある。

文脈によって同じ5でもInt型にもなるし、Integer型にもなる。また浮動小数点型にもなる。文脈が数値リテラルの型を決める。

文脈によらず数値リテラルの型を限定するには以下のように宣言する。

    • x = (2 :: Int)

この場合は数値リテラルの2がInt型と宣言され、Int型の2を変数xに束縛しています。

    • y = (3 :: Integer)

この場合は数値リテラルの3はInteger型と宣言され、Integer型の3を変数yに束縛しています。

  • 型の異なる同士の演算

型が異なる同士の演算を行うには、明示的に型を変換する必要がある。

 -- xの型はInt型
x = (15 :: Int)
 -- yの型はInteger型
y = (10 :: Integer)

 -- xとyの型は異なるので、このままだと演算は出来ない。
 -- x又はyのどちらかを一方の型に変換することによって演算が可能になる。
main = do print $ (toInteger x) + y     -- xの型をInteger型に変換
          print $ x + (fromInteger y)   -- yの型をInt型に変換
          print $ (fromIntegral x) + y  -- xの型をInteger型に変換
          print $ x + (fromIntegral y)  -- yの型をInt型に変換
  • toInteger x、fromInteger x及びfromIntegral xの定義
    • toInteger x

Int型の値xをInteger型に変換します。

    • fromInteger x

Integer型の値xを数値型に変換します。但し返り値の型は文脈で決まります。

整数型ではなく数値型に変換するという点に注目。演算相手がFloat型だとfromInteger xはFloat型を返すということかな?(未確認)

    • fromIntegral x

Int型又はInteger型の値xを数値型に変換します。但し返り値の型は文脈で決まります。この関数もfromInteger同様に整数型ではなく数値型に変換するという点に注目。自分の演算相手がDouble型であれば、Double型に変換して返してくれるということかな?(未確認)

ゲスト



トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060710