第1回 Haskellプログラミングの楽しみ方

山下 伸夫
株式会社タイムインターメディア

2008/10/29

関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう(編集部)

 本連載は、Haskellプログラミングの初歩から始めて、日常的なスクリプティングやWebプログラミングをHaskellで楽しめるようになるまでのガイドである。

Haskellプログラミングのスタイル

 Haskellプログラミングに興味はある人でも、Haskellプログラミングの習得にはちょっとした障壁を感じることがあるのは間違いないようだ。小難しい概念や用語のせいでもあるが、それらはあまり重大な理由ではない。

 障壁となるのはHaskellのプログラミングスタイルである。Haskellのプログラミングスタイルは関数プログラミングという系統に属する。一方、現在主流である言語でのプログラミングスタイルは命令プログラミングという別の系統に属する。

 関数プログラミングと命令プログラミングとは出自が全く別の系譜のプログラミングスタイルなのである。同じ系譜のスタイルであればすでに知っているスタイルとの比較やアナロジーによって、新しいスタイルを理解し身に付けることもできるが、そもそも別系統にあるスタイルを一方のスタイルのアナロジーだけで理解し、習得しようとするのには無理がある。

 Haskellで書かれたライブラリやフレームワークを理解し利用するためには、関数プログラミングという思考スタイルが身に付いていることが必須である。というわけで、この連載では「関数プログラミングというスタイルで考える」ということに焦点を当てる。

 Haskell以外のプログラミング言語を使ったアナロジーはあまり理解の助けとしては有効ではない。そればかりではなく、むしろ妨げになる場合が多いので、そのようなアナロジーは行わない。

 従って、Haskell以外の言語でのプログラミングの知識や経験も前提としない。ただし、テキストエディタを使って書いたものを保存したり、シェル(あるいはコマンドライン)からプログラムを起動したりというような計算機の基本操作はできるものと仮定して、特に説明はしない。

Haskellプログラミングを楽しむための心得

 Haskellプログラミングに限らず、初めての技法でプログラミングを楽しむ秘訣は以下の5つである。

  1. 初めての思考方法に寛容になること
  2. 計算ができるということに感動すること
  3. 共通のパターンに敏感になること
  4. 抽象を楽しむこと
  5. 過去の経験とのアナロジーを避けること

 Haskellプログラミングを楽しむためには、プログラムを編集しファイルに保存するためのエディタとファイルに保存したソースプログラムを実行形式に変換するコンパイラ、それに対話型のインタプリタなどが必要になる。もちろんそのようなソフトウェアが動作するためのオペレーションシステムやPCも必要である。

 この連載では、OSとしてLinux、Haskellの処理系としてGHC、テキストエディタとしてEmacsとEmacs上のHaskellプログラミング支援モードhaskell-modeを使う。

 Haskellの処理系GHCはLinux以外でも、Windows XP/Vista、Mac OS X 10.5、FreeBSDなどでも使えるバイナリパッケージが配布されている。GHCのパッケージが使えるOSであれば、それ用のEmacsのパッケージも入手可能である。WindowsではMeadowでもhaskell-modeが使える。

 プログラミング環境のセットアップについては、以下のページが参考になる。

関連リンク:
リンク HowTo:ProgrammingEnvironment
http://www.sampou.org/cgi-bin/haskell.cgi?HowTo%3aProgrammingEnvironment

セッションとスクリプト

 連載第1回では、セッションとスクリプトについて説明する。少々やさしすぎて退屈に感じるかもしれないが、この2つの概念はHaskellプログラミングにとって最も基本的で重要な部分なので、そのフィーリングを十分に感じてもらいたい。

 ユーザーが計算機に指示をし、計算機がその指示どおりに計算し、結果をユーザーに知らせるというユーザーと計算機のやりとりを「対話(interaction)」あるいは「セッション」という。

 セッションは人間同士の対話と同様に「言語」を用いて行う。Haskellを用いてのセッションは対話型のインタプリタGHCiを通じて行う。まずセッションを通じてHaskellプログラムにおける計算について考えよう。

GHCiの起動と終了

 Haskellを用いてセッションを行うには、対話型インタプリタGHCiを使う。GHCiを起動するには、シェルのプロンプトに対して、ghciとタイプする。

$ ghci
GHCi, version 6.8.3: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> _

 プロンプト(この場合 Prelude> )が表示され、カーソル(この場合 _)が現れたら無事GHCiが起動したことになる。これでセッションを始めることができるのだが、次に進む前にセッションの終了方法を説明しておく。セッションを終了するには、プロンプトに対して:quit、あるいはその省略形、:qをタイプしてGHCiを終了する。

Prelude> :quit
Leaving GHCi.
$ _

 シェルのプロンプト(ここでは $)が表示されカーソル(ここでは _)が現れればシェルに戻ったことになる。

 
1/3

Index
Haskellプログラミングの楽しみ方
Page1
Haskellプログラミングのスタイル
Haskellプログラミングを楽しむための心得
セッションとスクリプト
GHCiの起動と終了
  Page2
電卓としてのGHCi
スクリプト
名前を付ける
スクリプトを書く
  Page3
スクリプトのロード
スクリプトを読む
Haskellスクリプトにおける名前

のんびりHaskell

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間