WinHugs の使い方

Haskell の概要がおぼろげながらわかってきたので、さっそくプログラムを書いてみた。WinHugs をダウンロードして、インストーラーでインストールするとデスクトップにアイコンができるので、それをダブルクリックする。

WinHugs ではプログラムはファイルに作る必要があるので :edit コマンドでファイルを作成する。

Hugs> :edit getArgs.hs

エディターが現れたら、次のプログラムを入力する。

module Main where

import System.Environment

main = do
    args <- getArgs
    putStrLn (unwords args)

module Main where はこのファイルのプログラムが Main モジュールのプログラムであることを表している。import 命令は他のモジュールを読み込んで使うためのものだ。ここでは、コマンドライン引数を受け取る getArgs 関数を使いたいので、System.Environment モジュールをインポートする。

main = 以下がメインモジュールのプログラミングだ。do はアクションを実行するための命令。getArgs, putStrLn などはIO関係の関数なので特別にアクションと呼ばれる。これを実行するには do 命令が必要になるのだ。Hugsの場合はインデントに意味があるので、書籍やオンラインマニュアルで調べておいたほうがいい。

このプログラムでは getArgs で取得した文字列のリストを args に束縛(bind) しそれを unwords 関数に渡して文字列に戻し、それを putStrLn 関数で端末に表示させるようにしている。

編集がすんだら、エディターを閉じてプロンプトに戻り、

Hugs> :load getArgs.hs

のようにしてファイルをインタープリタに読み込む。これで準備が出来たので、

:main hello world のように引数をつけてmain 関数を起動する。

Main> :main hello world
hello world

また、

Hugs> main

のように、関数名をいきなり入力してもプログラムを動かすことができるが、:main コマンドを使うとコマンドライン引数をプログラムに与えることができる。(getArgs 関数で受け取る。)

WinHugsをパスに登録しておけば、getArgs.hs は、

> runhugs getArgs.hs hello world のようにWinodwsのコマンドプロンプトから動かすこともできる。

ついでにもう一つプログラムを作ってみよう。次のようなプログラムを fact.hs というプログラムに作成する。

fact :: Integer -> Integer
fact 0 = 1
fact n | n > 0 = n * fact (n-1)

最初の fact :: Integer -> Integer は関数 fact の型を宣言している。Haskell は型チェックが厳しいと聞いていたので恐れていたが、何のことはない、引数の型と値の型をただ矢印でつないだだけのものだ。この型宣言は省略してもプログラムは動くことが多いが、あとで見返すとき引数や値の型が書いてあったほうが理解しやすいので極力記載するほうがいい。

次の fact 0 = 1 とは fact の引数が 0 の時、その値は 1 であることを表している。3行目は、fact の引数 n がn>0 の時 fact の値が n * fact (n-1) であることを表している。Haskell ではこのように引数のパターンによって値を記述するという形をとることが多い。このようなパターンによるプログラミングでは、if ~ then 等の制御文が現れずすっきりした感じがする。3行目の|から = までの間をガードと言い、引数の条件を記載する。

プログラムが完成したら、エディターを閉じ、:load コマンドでインタープリターに読み込み、fact 5 のようにプロンプトから関数名と引数を入力して実行することができる。

Hugs> :edit fact.hs
Hugs> :load fact.hs
Main> fact 5
120

このようにして作成したプログラムファイルの一覧は、Winhugs ウィンドウのファイルボタンをクリックすると見ることができる。

Huskellの関数はモジュール毎に管理されているので、:browse Prelude のようにモジュールを指定して :browse 命令を使うと関数の一覧を表示できる。ことに、Prelude モジュールはデフォールトで読み込まれるモジュールなので確認しておいたほうがいい。

Main> :browse Prelude
module Prelude where
False :: Bool -- data constructor
True :: Bool -- data constructor
(&&) :: Bool -> Bool -> Bool
以下省略。

:load 命令などでファイルを読み込むと、プロンプトのモジュール名が変更されるが、もとに戻すときは :module 命令を使う

Main> :module Hugs
Hugs>

Winhugs を終了するには、:quit 命令を使う。

Hugs> :quit

これだけの操作でとにかくHaskell プログラムを作ったり動かしたりが WinHugs インタープリタ上でできるようになるはずだ。あとは、ひたすらネットでサンプルプログラムを探しまくってとにかく動かしてみるとよい。Rubyを勉強したときもプログラミングがこんなに楽しいかと驚いたが、Haskell も結構楽しい言語だ。圏論やモナドに恐れをなして近づかないようにしていたのが嘘のようだ。
[PR]
by tnomura9 | 2009-08-08 22:18 | Haskell | Comments(0)
<< Haskell の情報源 Maybe モナド >>