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 も結構楽しい言語だ。圏論やモナドに恐れをなして近づかないようにしていたのが嘘のようだ。
by tnomura9
| 2009-08-08 22:18
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||