Haskell 3日目
高階関数
例えば、次のような関数
map squre [1, 2, 3]
この式ではsquare関数がmap関数の第1引数として使われている。
squareがmap関数の第1引数、[1, 2, 3]がmap関数の第2引数となっている。
map関数のように他の関数を引数にとる関数のことを、高階関数(higher order function)と呼ぶ。
map関数の型は、
map :: (a -> b) -> [a] -> [b]
のようになっている。
(a -> b)が第1引数の型、[a]が第2引数の型、[b]が返り値である。
if式
if式は次のように書く
if 条件式 then 式1 else 式2
条件式の値がTrueであれば式1を返し、Falseなら式2を返す。
Haskellのifは次の特徴がある
- 文ではなく式で、常にif式全体が値をもつ。
- elseは省略できない。
- 条件式の値は真偽値(TrueかFalse)でなければならない。違う場合は型エラーが起こる。
パターンマッチ
パターンマッチとは、値のパターンによって場合分けする手法。
例えば、以下のプログラム例
tabStop = 8 main = do cs <- getContents putStr $ expand cs expand :: String -> String expand cs = concatMap expandTab cs expandTab :: Char -> String expandTab '\t' = replicate tabStop ' ' expandTab c = [c]
の
expandTab '\t' = replicate tabStop ' '
の部分。
expandTab関数の引数が'\t'の場合にのみ定義が使われ、その他の場合は、
expandTab c = [c]
が使われる。
リストに対するパターンマッチ
map関数の定義
map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs
以下の部分が、空リストだけにマッチするパターン
map f [] = []
以下の部分がリストに対するパターンマッチ
map f (x:xs) = f x : map f xs
『(x:xs)』がリストに対するパターンで、このパターンは空リスト以外のリストにマッチする。
マッチしたときにはリストの最初の要素にxが束縛され、第2要素以降のリストにxsが束縛される。
今日のところはここまで
関連記事
[Haskell][プログラミング言語][関数型言語]Haskell 2日目
[Haskell]Haskellのリファレンスマニュアルを検索するツール href
[Haskell][プログラミング言語][関数型言語]ふつうのHaskellプログラミング
[プログラミング言語]ハッカーを目指す者が習得すべき5つのプログラミング言語
[プログラミング言語]プログラミング言語ヒエラルキー
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 314回
- この商品を含むブログ (320件) を見る