letlet式はローカルスコープを作るために使い、次のようないくつかの場面で役立ちます。
let式の中では、分割代入(詳しくは後の演習で説明します)を含め、ほとんどのことができます。ただし、新しいカスタム型や型エイリアスを定義することはできません。
let
cube x = x * x * x
in
cube a + cube b + cube c
beginWithPattern : Size -> Padding -> Pattern -> GameOfLife
beginWithPattern minimumSize padding pattern =
let
size = calculateSize minimumSize padding pattern
center = Size.center size
centeredPattern = Pattern.centerAt center pattern
dimensions = { width = size, height = size }
deadCells = Matrix.create dimensions Dead
in
GameOfLife (bringPatternToLife deadCells centeredPattern)
誕生日に新しい料理本をもらい、載っているラザニアのレシピが今お気に入りの料理本より優れているかどうか、確かめてみたくなりました。この演習では、新しい料理本のラザニア作りを手伝ってくれるコードを書きます。
ルームメイトはまだオフィスで忙しく働いていて、ラザニアが何時にできるのかを知りたがっています。時間どおりに帰って来られるようにするためです。
ラザニアがいつできるかを計算する関数を作りましょう。コードをシンプルで表現豊かにするために、let式を使いましょう。
2つの入力を受け取り、let式を本体に持つremainingTimeInMinutes関数を定義します。1つ目の入力はラザニアの層の数で、2つ目の入力は料理を始めてからの経過時間(分)です。
let式のletの部分でexpectedMinutesInOvenを定義し、ラザニアをオーブンに入れておくべき時間が何分かを確認します。料理本によると、オーブンに入れておく時間は40分です。
expectedMinutesInOven
--> 40
let式のletの部分でpreparationTimeInMinutesを定義します。これはラザニアの層の数を入力として受け取り、1層あたり2分かかると仮定して、ラザニアの準備にかかる時間が何分かを返します。
preparationTimeInMinutes 3
--> 6
let式のinの部分で、ラザニアができるまで残り何分かを返します。これはpreparationTimeInMinutesとexpectedMinutesInOvenの合計から、料理を始めてからの経過時間を引いたものです。
remainingTimeInMinutes 3 10
--> 6 + 40 - 10 = 36