第1回 Haskellプログラミングの楽しみ方
山下 伸夫
株式会社タイムインターメディア
2008/10/29
関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう(編集部)
本連載は、Haskellプログラミングの初歩から始めて、日常的なスクリプティングやWebプログラミングをHaskellで楽しめるようになるまでのガイドである。
Haskellプログラミングのスタイル
- - PR -
Haskellプログラミングに興味はある人でも、Haskellプログラミングの習得にはちょっとした障壁を感じることがあるのは間違いないようだ。小難しい概念や用語のせいでもあるが、それらはあまり重大な理由ではない。
障壁となるのはHaskellのプログラミングスタイルである。Haskellのプログラミングスタイルは関数プログラミングという系統に属する。一方、現在主流である言語でのプログラミングスタイルは命令プログラミングという別の系統に属する。
関数プログラミングと命令プログラミングとは出自が全く別の系譜のプログラミングスタイルなのである。同じ系譜のスタイルであればすでに知っているスタイルとの比較やアナロジーによって、新しいスタイルを理解し身に付けることもできるが、そもそも別系統にあるスタイルを一方のスタイルのアナロジーだけで理解し、習得しようとするのには無理がある。
Haskellで書かれたライブラリやフレームワークを理解し利用するためには、関数プログラミングという思考スタイルが身に付いていることが必須である。というわけで、この連載では「関数プログラミングというスタイルで考える」ということに焦点を当てる。
Haskell以外のプログラミング言語を使ったアナロジーはあまり理解の助けとしては有効ではない。そればかりではなく、むしろ妨げになる場合が多いので、そのようなアナロジーは行わない。
従って、Haskell以外の言語でのプログラミングの知識や経験も前提としない。ただし、テキストエディタを使って書いたものを保存したり、シェル(あるいはコマンドライン)からプログラムを起動したりというような計算機の基本操作はできるものと仮定して、特に説明はしない。
Haskellプログラミングを楽しむための心得
Haskellプログラミングに限らず、初めての技法でプログラミングを楽しむ秘訣は以下の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 |
プロンプト(この場合 Prelude> )が表示され、カーソル(この場合 _)が現れたら無事GHCiが起動したことになる。これでセッションを始めることができるのだが、次に進む前にセッションの終了方法を説明しておく。セッションを終了するには、プロンプトに対して:quit、あるいはその省略形、:qをタイプしてGHCiを終了する。
Prelude> :quit |
シェルのプロンプト(ここでは $)が表示されカーソル(ここでは _)が現れればシェルに戻ったことになる。
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の世界を体験してみよう |
|
- 構造体の便利な用途、インターフェイス入門 (2010/3/10)
継承機能を排除したインターフェイス機能でダックタイピングが可能となった。サンプルで確かめてみよう - プライベートモードの履歴状態 (2010/3/1)
仕事に集中できるときと、なかなかできないとき、ありますよね。状態遷移図で考えてみよう - Goのswitch文で解くFizzBuzzと構造体のイントロ (2010/2/25)
Goではif文と同等の制御構造をswitch文で表現できる。試してみよう - SQL4GでGAE+Railsを体験しよう (2010/2/23)
Google App Engine上でRDBMSを使ったRailsアプリケーションを構築する。環境設定手順を詳しく解説
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 New! |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |

| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |

| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |
| ◆ | 直属上司が海外にいるのエンジニアに見る 【実例】場所に捉われないワークスタイル |

| ◆ | 「仮想化工房」のマイスターが選んだのは VMware、Hyper-V、そしてVirtageだった! |
| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







