トラック
/
Elm
Elm
/
演習
/
マリオの素晴らしいラザニア
マリオの素晴らしいラザニア

マリオの素晴らしいラザニア

学習演習

はじめに

let

let式はローカルスコープを作るために使い、次のようないくつかの場面で役立ちます。

  • 式を簡潔にするため
  • 途中の式の結果に名前を付けるため
  • 式が大きくなってきたときに、小さな部分に分けるため

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)

説明

誕生日に新しい料理本をもらい、載っているラザニアのレシピが今お気に入りの料理本より優れているかどうか、確かめてみたくなりました。この演習では、新しい料理本のラザニア作りを手伝ってくれるコードを書きます。

ルームメイトはまだオフィスで忙しく働いていて、ラザニアが何時にできるのかを知りたがっています。時間どおりに帰って来られるようにするためです。

1. ラザニアがいつできるか計算する

ラザニアがいつできるかを計算する関数を作りましょう。コードをシンプルで表現豊かにするために、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
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Elm Exercism

マリオの素晴らしいラザニアを始める準備はできましたか?

Exercismに登録すれば、28個のコンセプト110個の演習、そして本物の人間によるメンタリングとともに、Elmを学んでマスターできます。すべて無料です。