# HG changeset patch # User Daichi TOMA # Date 1390116997 -32400 # Node ID f354d23bd80dfc96c2f48540bced61abc9cdd9e2 # Parent 37efb7dc0bda3c1502af566e826d7c1698cdb37b describe 2.1 diff -r 37efb7dc0bda -r f354d23bd80d paper/chapter1.tex --- a/paper/chapter1.tex Sun Jan 19 10:55:59 2014 +0900 +++ b/paper/chapter1.tex Sun Jan 19 16:36:37 2014 +0900 @@ -1,10 +1,32 @@ \chapter{Haskellとは} \label{ch:haskell} -Haskellとは純粋関数型プログラミング言語である。 +Haskell とは純粋関数型プログラミング言語である。 +Haskell では、変数の代入は一度のみで書き換えることはできない。 +また、引数が同じならば関数は必ず同じ値を返すことが保証されている。 +このような特徴から既存の手続き型言語と同じようにプログラムを書くことはできず、関数を組み合わせることでプログラミングを行う。 \section{関数型プログラミング} +関数とは、一つの引数を取り一つの結果を返す変換器のことである。 関数型プログラミング言語では、引数を関数に作用させていくことで計算を行う。 -Haskellは純粋であり、参照透過性を持つ。 -参照透過性という性質は、引数が同じならば関数は必ず同じ値を返すことを保証する。 -\section{データ型} + +Haskell は純粋であり、引数が同じならば関数は必ず同じ値を返すことが保証されている。 +これはつまり、関数の正しさを簡単に推測でき、また関数同士を容易に組み合わせられることを意味している。 +実際、Haskell では小さな関数をつなぎ合わせることでプログラミングを行う。 + +関数型プログラミング言語は、関数を第一級オブジェクトとして扱うことができ、高階関数を定義することができる。 +これは、引数として関数を取ったり返り値として関数を返すことができるということである。 +高階関数は問題解決の強力な手段であり、関数型プログラミング言語にはなくてはならないものである。 +Haskell では標準ライブラリに、リストを処理するための便利な高階関数がいくつも定義されている。 + +Haskell では、全ての関数は一度に一つの引数だけを取る。 +複数の引数を取るようにみえる関数は、実際には1つの引数を取り、その次の引数を受け取る関数を返す。 +このように関数を返すことで全ての関数を一引数関数として表すことをカリー化という。 +カリー化によって、関数を本来より少ない引数で呼び出した際に部分適用された関数を得ることができる。 + +再帰もまた関数型プログラミング言語において必要不可欠な要素である。 +再帰とは、関数を関数自身を使って定義することをいう。 +関数型プログラミング言語では、ループといった処理を行う場合再帰を用いる。 +また、リストの畳み込み関数といった再帰を用いた関数が標準ライブラリで提供されている。 + +\section{型} \section{Monad} \section{並列実行}