[[プログラミング言語]] *能書き [#ycc6155f] **Haskellの特徴 [#nf0358a2] Haskellのおもな特徴を列挙すると次のようになる。この手の言語に慣れていない人には意味の分からないところがあるかもしれないが、それは筆者が説明をサボっているからなので、適当にスルーしてほしい。 -代数的データ型と、パターン照合。 -インデントを利用した簡潔な構文。 -型推論つき静的型付け。 -型推論と多重定義を両立する、型クラス。 -純粋な(つまり、式に副作用がない)関数型であること。 -モナドによる入出力 **関数型言語って何 [#l5605168] Haskellは純粋関数型言語に分類される。関数型言語というのは、関数的プログラミングがしやすいような言語、という意味だ。では関数的プログラミングとは何というと、これは手続き的プログラミングと比較してみるのが良い。 現在主流の言語は、ほぼ全て手続き型言語だ。手続き的プログラミングでは、コンピュータに単純な命令を出すことができて、それをたくさん並べ、組み合わせることでプログラムを書く。例として、次の問題を考えてみる。 1からnまでの整数の中で、2でも3でも割り切れないものの総和を求めよ。 整数を6で割った余りに着目する賢い方法もあるが、ここでは素朴に、1からnまでの全ての整数について、2か3で割り切れるか試し、テストを通過したものを全て足し合わせる方法を取ることにする。手続き的プログラミングでは、この問題を解くプログラムは大体次のようになる。 「総和」を0とする。 「現在の整数」が0からnまで動く間、以下の一行を繰り返す: もし、「現在の整数」が2でも3でも割り切れないなら、「総和」に「現在の整数」を足す。 この時点で「総和」が問題の答えになっている。 このプログラムには、「「総和」を0とする」とか、「「総和」に「現在の整数」を足す」という命令が使われている。これらの命令を、繰り返しや条件判断(もし~ならば~する)と組み合わせることで、プログラムが構成されている。プログラムは、原則として、上にある命令から順に実行される。このプログラムでは、実行が進むにしたがって、「総和」の値は刻々と増えていく。このように、変化する値(変数)を使うのが命令型プログラミングの特徴のひとつだ。 一方、関数的プログラミングでは、データに着目する。何か問題を解くプログラムを書くときは、入力データと出力データを考えて、入力データが与えられたとして、出力データがどうなるかを記述する。これはちょうど、入力データから出力データへの(数学的な)関数を書き下すことに相当する。例えば、上の問題を関数的プログラミングで解いてみると次のようになる。 1からnまでの整数の列をAとする。 Aから、2でも3でも割り切れない整数のみを取り出した列をBとする。 Bの要素を全て足し合わせたものが問題の答えである。 このプログラムには命令はどこにも出てこない。ただ入力と出力の関係を述べているだけだ。変数(変化する値)も使われていない。あるのは、入力データ、出力データ、AやBという中間データと、それらをどのように定めるかの規則だけだ。 このふたつのスタイルの違いは、言語の違いにそのまま対応する訳ではない。関数的プログラミングのできる手続き型言語は多いし、逆に、関数型言語は大抵、手続き的プログラミングもできるようになっている。それでも、どっちに基礎を置くかの違いはあって、細かい部分のスタイルには大きな違いがあるので、どちらか一方しか知らない人はもう一方を学んでみると新鮮な驚きがあるかもしれない。 手続き型言語は、現実のコンピュータと相性の良い構造になっている。CPU自体、命令を次々と処理していくように作られているからだ。これに対して、関数型言語は、抽象的・数学的な計算や記号操作を基礎にしている。Haskellは「純粋」な関数型言語という位で、とくにこの傾向が強い。 **おすすめ [#x0716709] 上のような特徴から、少なくとも以下のような人にはHaskellをおすすめできる。 -手続き型言語に飽きた。 -命令するのよりも記述する方が好き。 -複雑な記号操作を必要とするプログラム(言語処理系とか)を書きたい。 -俗世よりも抽象的・記号的な世界に興味を惹かれる。数学好きとかプラトン主義者とか二次元愛好者とか。 *処理系を導入する [#bc9decb0] **入れる処理系を選ぶ [#p188b359] 2007年7月の時点では、以下の処理系がメンテナンスされている。 :[[GHC:http://www.haskell.org/ghc/]]:対話環境とインタプリタとネイティブコンパイラのセット。 :[[Hugs:http://www.haskell.org/hugs/]]:対話環境とインタプリタのセット。対話環境にはWindows用GUIも付属している。 ここでは、利用者の多いと思われるGHCのインストールを説明する。 **GHCのインストール [#n589bef9] ***Windows [#hc33c8f1] [[GHCのダウンロードページ:http://www.haskell.org/ghc/download.html]]の「Current Stable Release」のリンクをたどり、「Windows (x86) (standalone)」のところからインストーラ(msiまたはexe)をダウンロードして実行する。インストール終了後、「<GHCをインストールしたディレクトリ>\bin」(デフォルトではC:\ghc\ghc-<バージョン番号>\bin、インストーラの最後のダイアログボックスで確認できる)を環境変数PATHに加える。 コマンドプロンプトを開き、「ghc --version」と入力してみる。 The Glorious Glasgow Haskell Compilation System, version 6.6.1 こんな感じのものが表示されれば成功。 ***Arch Linux, Debian, Fedora, FreeBSD, Gentoo, MacOS X, NetBSD, OpenBSD, openSUSE, Ububtu [#e399dfbb] OSごとにパッケージが用意されている。詳しくは[[GHC: Distribution Packages:http://www.haskell.org/ghc/distribution_packages.html]]を参照。 ***その他のプラットフォーム [#f94399f7] [[GHCのダウンロードページ:http://www.haskell.org/ghc/download.html]]からバイナリパッケージを入手してインストール。なお、GHCを普通にビルドしようとするとGHCが必要なので、初めてのインストールではバイナリを使うことを勧める。 *リンク [#d251be92] **公式 [#s71afa0c] -http://www.haskell.org/ **処理系 [#je126b42] :GHC:http://www.haskell.org/ghc/ :Hugs:http://www.haskell.org/hugs/ **日本語サイト [#cd41828e] http://www.sampou.org/cgi-bin/haskell.cgi