Haskell-補助関数

補助関数とは

補助関数とは、関数定義の内部でのみ使用する部分的な関数のことです。


補助関数を作成することで、複雑で分かりにくいプログラムの構造を簡潔にして可読性を向上することができます。

また、処理毎に分割することはプログラムを再利用しやすく、保守性のあるものにします。

なお、補助関数を内包する親となる関数は「最上位関数」と呼ばれます。


Haskellにおける補助関数の定義方法は「let」と「where」の2通りありますが、whereを使うほうが一般的といえます。

どちらを使用しても問題ありませんが、混在していると可読性が悪くなるため、統一して利用することが推奨されています。


letキーワード

letキーワードを用いることで、関数内部で使用する定数や関数の定義を列挙できます。

let内で定義している定数や関数は、let文の内部でのみ利用できます。

また、各定義のインデントは揃える必要があります。


関数名 引数 = let 内部定義1
                  内部定義2
                      :
              in do 関数本体

let サンプル

以下の例では、let内の定義を利用して関数の処理を行います。

let内の定義から「a=3(2+1)」「b=2」「c=9(3*2+3)」が求められます。

in do後の関数本体において「9*3」を求めます。


$ cat Let_keyword.hs 
#!/usr/bin/env runghc

func x = let a = b + 1       -- 式
             b = 2           -- 定数
             f c = a * b + c -- 関数
         in do a * f x       -- 関数本体

main = print(func 3)

$ ./Let_keyword.hs 
27

whereキーワード

whereキーワードを用いることで、関数内部で使用する定数や関数の定義を列挙できます。

where内で定義している定数や関数は、where文の直前の関数でのみ利用できます。

また、各定義のインデントは揃える必要があります。


関数名 引数 = 関数本体
  where 内部定義1
        内部定義2
           :

where サンプル

以下の例では、where内の定義を利用して関数の処理を行います。


$ cat Where_keyword.hs 
#!/usr/bin/env runghc

func x = a * f x        -- 関数本体
  where a = b + 1       -- 式
        b = 2           -- 定数
        f c = a * b + c -- 関数

main = print(func 3)

$ ./Where_keyword.hs 
27

関連ページ