練習問題 2.1.5

3つの整数を非減少順に並べる関数
sort3
を定義せよ. これにより関数
analyse'
を定義して,引数が非減少順になっているという仮定に依存しないようにせよ.



sort3 :: (Int,Int,Int) -> (Int,Int,Int)
sort3 (x,y,z)
  | x > y      = sort3 (y,x,z)
  | y > z      = sort3 (x,z,y)
  | otherwise  = (x,y,z)
analyse'  :: (Int,Int,Int) -> Triangle
analyse' (x,y,z) = analyse (sort3 (x,y,z))

-- 以下は前問の解答を再掲

data Triangle = Failure | Isosceles | Equilateral | Scalene

analyse :: (Int,Int,Int) -> Triangle
analyse (x,y,z)
  | x == z                                  = Equilateral
  | x /= z && y == z                        = Isosceles
  | x + y > z && x /= z && y /= z && x == y = Isosceles
  | x + y > z && x /= z && y /= z && x /= y = Scalene
  | x + y <= z                              = Failure