Haskellクイックスタート
翻訳校正:原井彰弘
Haskellのような関数型言語は難しいと感じるかもしれない。今回は、Haskellの簡単なクイックスタートを提供する。
module Builder where
fact 0 = 1
fact x = x * fact (x-1)
最初の行は、このファイルがBuilderという新しいモジュールを含んでいることを表している。このモジュールは、階乗の計算を行う関数のみを含んでいる(階乗の関数は、再帰関数を示すときによく用いられる例である)。ところで、この関数には2つの定義がある。1つ目の定義は0の階乗が1であることを示し、2つ目の定義では、0以外の値xの階乗は、(x - 1)を引数として呼び出したfactの戻り値をx倍したものであることを示している。
このモジュールをGHCi内でロードするには、ファイルを保存した上で、次のようなコマンドを入力する必要がある。
Prelude> :l Builder.hs
[1 of 1] Compiling Builder ( Builder.hs, interpreted )
Ok, modules loaded: Builder.
*Builder>
では、早速定義した関数を使ってみよう。
*Builder> fact 1
1
*Builder> fact 2
2
*Builder> fact 10
3628800
*Builder> fact 100
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
*Builder> fact (-2)
*** Exception: stack overflow
この関数は動作するが、どうやら負の値を扱えないという問題があるようだ。この問題を解決するために、値が正であれば一つずつ減らしていき、負であれば一つずつ加えていくという関数を考えてみる。
betterFact 0 = 1
betterFact x = x * betterFact (x `op` 1)
where op = if x > 0 then (-) else (+)
この関数は以前のものよりも少し複雑で、いくつかの新しい概念を含んでいる。まず、一番最後の行では、where構文を用いてopという新しい変数を定義している。where構文を用いると、複雑なコードや共通するコードをその内容を説明する名前の変数で置換することが可能になるため、関数の見通しがよりよくなる。
このケースでは、変数opは関数である。つまり、if構文を用いて変数opにマイナスの関数(-)もしくはプラスの関数(+)を代入している。関数もオブジェクトそのものであるため、簡単に変数へ代入することが可能なのである。
最後に、この例では変数を接中辞(infix)関数として扱っている。これは、引数を算術演算子のように両側に書けるようにしたもので、2行目のようにバッククォートで変数を括ることによって実現できる。ここでは、もしxが正ならばbetterFactの次の引数としてはx - 1を用い、もしxが負ならばx + 1を用いるという意味になっている。
- 今日のトップ記事
- 昨日
- 4日前
- 5日前
- 6日前
- 7日前
- ホワイトペーパー
- 話題のタグ
ソーシャルテクノロジーをビジネスに利用する
Linux必携のオフィス向けアプリケーション10選
iPhoneでQRコードの読み取りを試す、しかし
Oracle VM Managerで仮想マシンを動かす
グルジアに渡ったカメラマンの全記録--大国に翻弄される人々の息遣い
iPod touchで音声通話が可能に--Fringを早速試す
Mozilla Labs、Firefoxで地理情報を認識活用できるプラグイン「Geode」を正式発表
DelphiのパフォーマンスをDelphiで改善:エンバカデロの製品戦略
社内政治を生き抜くための教訓10箇条
グリーンITの第一歩は見える化です
ZDNet Japan Green IT
これからの時代のセキュリティ対策
ERPパッケージの導入を成功させるコツ
Techno Exchange
エンタメCGM「gooメーカー☆メーカー」