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

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

2008/10/29

電卓としてのGHCi

 GHCiを起動してプロンプトとカーソルが表示されたらいよいよセッションの開始である。プロンプトに対して「」をタイプしてからリターンキーをタイプすると、GHCiはその式の「」を印字する。

「定価(本体 3,200円+税)」と書いてあるが、実際いくらなのか

 税が5%だとすると、税分は、

Prelude> 3200 * (5 / 100)
160.0

すなわち、160円の税金が掛かる。というわけで、

Prelude> 3200 + 160
3360

すなわち3360円が定価である。本体価格が3800円なら、

Prelude> 3800 * (1 + 0.05)
3990.0

すなわち3990円が定価である。

 GHCiはセッションを以下のように進める。

  1. プロンプトとカーソルを表示する
  2. ユーザーがタイプした式(expression)を読む
  3. 式の値(value)を計算する
  4. 結果の値を表示する
  5. 1に戻る

スクリプト

 GHCiが電卓として機能することは分かったので、次はプログラムを考えよう。

メートル単位での身長の値の自乗に、標準BMI 22.0 を掛けた値をキログラム単位で評価したものを標準体重という

 例えば、身長175センチメートルの人の標準体重は、

Prelude> (1.75 ^ 2) * 22.0
67.375

というわけで、67.375キログラムである(^ はべき乗演算子で 1.75 ^ 2 は 1.75の2乗すなわち自乗を表す)。身長159センチメートルの人の標準体重は、

Prelude> (1.59 ^ 2) * 22.0
55.6182

となる。

名前を付ける

 繰り返されるパターンがあれば、それがプログラムのもと、そこがプログラミングの出番である。

 先の例では、式「22.0」が繰り返し現れる。繰り返し現れる式には名前を付けると意味が分かりやすく覚えやすい。

 名前を付けると、その式を名前で呼び出すことができるようになる。式に名前を付けることを、「名前を(式に)束縛する」あるいは「名前を定義する」という。定義あるいは束縛の集まりのことを「スクリプト」という。HaskellプログラミングとはHaskellでスクリプトを書くことである。

スクリプトを書く

 Haskellスクリプトはテキストエディタというソフトウェアを使って書く。前述のようにこの連載ではエディタとしてEmacsを使う。シェルからEmacsを起動するには以下のようする。

$ cd work
$ emacs BMI.hs &
$

 「BMI.hs」はスクリプトファイル名である。Emacsをターミナル内で起動するには -nw オプションを付けて起動する。

$ cd
$ emacs -nw BMI.hs

 BMI.hsはスクリプトファイル名で、拡張子「hs」はHaskellスクリプトであることを示しており、この拡張子はエディタやコンパイラがHaskellスクリプトであることを認識するのに利用する。haskell-modeが設定されていれば、Emacsのステータスバーには「(Haskell Ind Doc)」のような表示が出ているはずである。

 BMI.hsを以下のように編集する。

module BMI where

type BMI = Double

stdBMI :: BMI
stdBMI = 22.0

 このスクリプトは要するに、22.0という式(が表す値)にstdBMIという名前を付けたものである(スクリプト全体の意味については後述する)。このスクリプトはstdBMIという名前を22.0という式と同一視するという宣言なのである。

 特別な指定をしなければ、GHCiは起動時に標準プレリュード「Prelude」というスクリプトを読み込む。このPreludeにはたくさんの定義がある。GHCiはこれらの定義を読んで記憶するので、ユーザーはPreludeで定義された名前を使って式を書くことができる。

 この記憶のことを「環境」という。また、スクリプトファイルを読み込んで定義を記憶することをスクリプトファイルの「ロード」という。

2/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 記事ランキング

本日 月間