掲載のコードでの変数 x
y
は whichbig
関数の中でしか使用できないため、whichbig
関数を呼ぶ側からは参照できません(変数を参照できる範囲を Haskell に限らず一般にその変数のスコープといいます)。
Haskell
1main :: IO ()
2main = do
3 seq (whichbig 1 2) $
4 print (x, y) -- ここでは x y は見えない
ですので whichbig
関数の意味を変えてみます。「どちらが大きいかを知りたい」と予想しまして whichbig
関数は (大きい方, 小さい方)
というタプル(2つ組)を返すようにします。Int
を2つ引数に取ってタプルを返すので型は次のようになります。
Haskell
1whichbig :: Int -> Int -> (Int, Int)
実装は if-then-else を使用してみると次のようになります(ちなみに Haskell では if-then-else は文ではなく式です)。
Haskell
1whichbig :: Int -> Int -> (Int, Int)
2whichbig x y =
3 if x > y
4 then (x, y)
5 else (y, x)
使用例は下記のようになります(Wandbox で実行)。
Haskell
1main :: IO ()
2main = do
3 let (big, small) = whichbig 1 (-1)
4 putStrLn $ "big: " ++ show big
5 putStrLn $ "small: " ++ show small
6
7whichbig :: Int -> Int -> (Int, Int)
8whichbig x y =
9 if x > y
10 then (x, y)
11 else (y, x)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/14 03:53