電卓としてのGHCi
GHCiを起動してプロンプトとカーソルが表示されたらいよいよセッションの開始である。プロンプトに対して「式」をタイプしてからリターンキーをタイプすると、GHCiはその式の「値」を印字する。
「定価(本体 3,200円+税)」と書いてあるが、実際いくらなのか |
税が5%だとすると、税分は、
Prelude> 3200 * (5 / 100) |
すなわち、160円の税金が掛かる。というわけで、
Prelude> 3200 + 160 |
すなわち3360円が定価である。本体価格が3800円なら、
Prelude> 3800 * (1 + 0.05) |
すなわち3990円が定価である。
GHCiはセッションを以下のように進める。
- プロンプトとカーソルを表示する
- ユーザーがタイプした式(expression)を読む
- 式の値(value)を計算する
- 結果の値を表示する
- 1に戻る
スクリプト
GHCiが電卓として機能することは分かったので、次はプログラムを考えよう。
メートル単位での身長の値の自乗に、標準BMI 22.0 を掛けた値をキログラム単位で評価したものを標準体重という |
例えば、身長175センチメートルの人の標準体重は、
Prelude> (1.75 ^ 2) * 22.0 |
というわけで、67.375キログラムである(^ はべき乗演算子で 1.75 ^ 2 は 1.75の2乗すなわち自乗を表す)。身長159センチメートルの人の標準体重は、
Prelude> (1.59 ^ 2) * 22.0 |
となる。
名前を付ける
繰り返されるパターンがあれば、それがプログラムのもと、そこがプログラミングの出番である。
先の例では、式「22.0」が繰り返し現れる。繰り返し現れる式には名前を付けると意味が分かりやすく覚えやすい。
名前を付けると、その式を名前で呼び出すことができるようになる。式に名前を付けることを、「名前を(式に)束縛する」あるいは「名前を定義する」という。定義あるいは束縛の集まりのことを「スクリプト」という。HaskellプログラミングとはHaskellでスクリプトを書くことである。
スクリプトを書く
Haskellスクリプトはテキストエディタというソフトウェアを使って書く。前述のようにこの連載ではエディタとしてEmacsを使う。シェルからEmacsを起動するには以下のようする。
$ cd work |
「BMI.hs」はスクリプトファイル名である。Emacsをターミナル内で起動するには -nw オプションを付けて起動する。
$ cd |
BMI.hsはスクリプトファイル名で、拡張子「hs」はHaskellスクリプトであることを示しており、この拡張子はエディタやコンパイラがHaskellスクリプトであることを認識するのに利用する。haskell-modeが設定されていれば、Emacsのステータスバーには「(Haskell Ind Doc)」のような表示が出ているはずである。
BMI.hsを以下のように編集する。
module BMI where |
このスクリプトは要するに、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の世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|