ガード式 vs 条件式

『Introduction to Functional Programming using Haskell』届きました。

この本は、Mirandaで書かれていた『関数プログラミング』Haskell版です。


1章 Fundamental concepts、1.5 Definitionsのあたりからメモ。


条件式の代わりにガード式を使用する利点は、3つ以上の節(clause)が定義される場合です。
たとえば、整数の引数xをとり、xが負の場合に-1、0の場合に0、正の場合に1を返すsignum関数を考えてみましょう。
ガード式を使用した場合は以下のように書きます:

signum :: Integer -> Integer
signum x
    | x <  0 = -1
    | x == 0 = 0
    | x >  0 = 1

条件式の場合は以下のように書きます:

signum :: Integer -> Integer
signum x = if x <  0 then -1 else
           if x == 0 then  0 else 1

3つの条件が明示的になるので、ガード式を使用した定義の方が簡潔です。