Haskellのプログラムは、定義と式からできています。
定数の値は、name = expressionで定義します。
five = 5
six = 3 + 3
関数は、name parameters... = expressionで定義します。仮引数は、スペースだけで区切ります。
add number1 number2 = number1 + number2
関数の呼び出しもまた式であり、関数名を指定して、その関数の仮引数それぞれに実引数をスペースで区切って渡すことで行います。書き方は関数の定義と同じです。
five = add 2 3
括弧(())を使うと、式を評価する順序を指定できます。
six = add 2 (1 * 4)
twelve = add 2 1 * 4
Haskellでは、空白文字とインデントを使ってコードの境界を指定します。 ある式の一部であるコードは、その式の先頭よりも深くインデントする必要があります。
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://en.wikibooks.org/wiki/Haskell/Indentation
モジュールは関数をエクスポートします。 つまり、モジュールがエクスポート文で公開している関数を使うことができます。 モジュールは、内部でだけ使う関数を定義することもできます。 デフォルトでは、明示的にエクスポートされていない関数は、モジュールの外部から使うことができません。
モジュールの先頭で、モジュール名を指定します。 Calculator.hsというファイルがあるなら、モジュールの名前もCalculatorにします。 そして、エクスポートする関数を指定し、そのあとで関数を書き始めます。 まずは、次のように書き始めます。
module Calculator ( add ) where
https://learnyouahaskell.github.io/modules#making-our-own-modules
コメントとは、Haskellのファイルの中にあるテキストのうち、コードとして解釈されないものです。
主に、書いた本人やほかのプログラマーが読むためのものです。
1行コメント用の軽量な書き方があり、2つのダッシュを使います。
複数行コメントも可能で、{-と-}の開き・閉じの区切り文字のペアを使います。
-- a single line comment
-- another single line comment
{- a multiline comment
spanning multiple lines
-}
この演習の紹介文は、Learn You a Haskell for Great Good!から自由に借用しており、Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported Licenseに基づいています。
この演習では、お気に入りの料理本を見ながら最高のラザニアを作れるように、コードを書いていきます。
タスクは3つあり、どれもラザニアの調理にかかる時間に関するものです。
expectedMinutesInOven定数を定義して、ラザニアをオーブンに入れておくべき時間が何分かを確認しましょう。料理本によると、オーブンでの想定時間は40分です。
expectedMinutesInOven
--> 40
preparationTimeInMinutes関数を定義しましょう。この関数は、ラザニアに重ねた層の数を仮引数として受け取り、ラザニアの準備に何分かかったかを返します。1層あたり2分かかるものとします。
preparationTimeInMinutes 3
--> 6
elapsedTimeInMinutes関数を定義しましょう。この関数は2つの仮引数を取ります。1つ目はラザニアに重ねた層の数、2つ目はラザニアがオーブンに入っている時間(分)です。この関数は、ラザニアの調理に何分かかったかを返します。これは、準備にかかった時間(分)と、その時点でラザニアがオーブンにいた時間(分)を足したものです。
elapsedTimeInMinutes 3 20
--> 26