08

30

[Haskell] WinGHCi の 使い方

2012.08.30(21:08)

Haskellプログラミングをするには、
Haskell Platform をインストールして使います。
http://hackage.haskell.org/platform/
Haskell Platform 2012.2.0.0 for Windows には、GUI版である、WinGHCiがついてきます。

main.png

以下のような設定をすると使いやすくなります。
まず、File - Options...
winghci_option.png

Haskellではレイアウトルールがあってインデントが重要です。Font faceから固定幅ピッチのフォントを選んでおくといいでしょう。私は Consolas の Bold が好きです。

GHCi Optionsの、Editorには、自分の好きなスクリーンエディタを設定します。

&C:\Program Files\EmEditor\emeditor.exe

のように、&に続けてフルパスを書きます。ダブルクォーテーションとか不要です。

一番下の Print type after evaluation をチェックしておくと、勉強に良いです。

Tools - Configure Tools... でよく使うコマンドを登録します。
tool2.png
たとえば、2番に、Haskellのプログラムを置いてあるディレクトリへcdするコマンド

:cd e:\haskell


tool3.png
3番に、いつもデバッグしているHaskellのソースをロードするコマンドを

:l hello.hs

設定しておくと、GHCiを立ち上げてすぐにセットアップができます。

いったんロードすると、ロードと同時に
コンパイルされるので、コンパイルエラーが出ます。

button.png

あとは、オレンジボタンで、スクリーンエディタでソースを編集して保存し、
緑のボタンで、reloadし、
赤のボタンで、mainを評価(つまりmainから実行)します。

同じプログラムをデバッグしている間は、緑と赤を交互におせばいいですね。



初心者のうちは、WinGHCi や GHCi を起動して出てくるプロンプトのところで、教科書に書いてあるとおりのプログラムを打ち込んでも動かないのでめんくらいます。

WinGHCi や GHCi を起動すると、プロンプトが出ている状態は、IOモナドの中のdoの中にいる状態です。しばらく勉強するとあとのほうで出てきます。なので、Haskellのプログラム全体では

main = do
putStrLn "hello"

というプログラムであっても、プロンプトのところでは、

Prelude> putStrLn "hello"
hello
it :: ()

だけで実行されます。doの中は、IOアクションを記述します。記述した順に、改行するとすぐに実行されます。もし純粋な値を名前に束縛したい場合は letをつけて入力します。たとえば、教科書にある例を1行ずついれて実行したい場合は、

Prelude> let sum' [] = 0
sum' :: Num a => [t] -> a
Prelude> let sum' (x:xs) = x + sum xs
sum' :: Num a => [a] -> a
Prelude> sum' [1,2,3]
6
it :: Integer

と入力します。最後の行はI/Oアクションなので、実行されて結果が標準出力されます。

また、letによる変数(関数名)の束縛でも、I/Oアクションでもない、型宣言だけの行は書くことができません。型宣言は変数の束縛と;で連結し、全体を{}でいっしょにしてしまうと受け取ってもらえます。

Prelude> sum' :: Num a => [a] -> a

:31:1:
No instance for (Show ([a0] -> a0))
arising from a use of `print'
Possible fix: add an instance declaration for (Show ([a0] -> a0))
In a stmt of an interactive GHCi command: print it

Prelude> let {sum' :: Num a => [a] -> a; sum' = foldr (+) 0}
sum' :: Num a => [a] -> a

Prelude> sum' [4,5,6]
15
it :: Integer


いずれにせよ、教科書に載っているとおりには入れられないので、やはりここは、スクリーンエディタ側で全体のソースを書いて保存して、:load ソース して、:main して、あとは :reload して :main を繰り返すのが良いと思います。

すごいH本 190ページ付近に、コマンドライン引数の説明があります。
import System.Environment しておけば、getArgs で引数のリストが手に入ります。もし、ghciにプログラムを :load しているなら、:main arg1 arg2 arg3 と入力すれば引数ありでプログラムを実行できます。(2012/9/10)

Haskellプログラミングを楽しんでください。
プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示