トラック
/
Gleam
Gleam
/
演習
/
天気ランキング
天気ランキング

天気ランキング

学習演習

はじめに

定数

Gleamの定数は、値に名前を付けるための仕組みです。constキーワードを使って定義します。

pub const pi: Float = 3.14159

pub fn circle_area(radius: Float) -> Float {
  radius *. radius *. pi
}

pubキーワードを付けて定義したモジュール定数は、他のモジュールからも参照できます。付けなかった場合は、定義したモジュールの中からしか参照できません。

Order

Gleamの標準ライブラリにあるgleam/orderモジュールには、値を比較するためのOrder型が含まれています。

Orderの定義は、次のようになっています。

pub type Order {
  Gt
  Eq
  Lt
}

この型には3つのバリアントがあり、それぞれが値と別の値との関係を表すために使われます。

  • Gt - 値がもう一方の値より_大きい_ことを表します。
  • Eq - 値がもう一方の値と_等しい_ことを表します。
  • Lt - 値がもう一方の値より_小さい_ことを表します。

データ型を大きさで比較できる場合、そのモジュールがOrder値を返すcompare関数を定義するのが一般的です。たとえば、gleam/floatとgleam/intは、それぞれ小数と整数を扱うcompare関数を定義しています。

int.compare(1, 2)
// -> Lt

int.compare(2, 2)
// -> Eq

float.compare(1.0, 2.0)
// -> Lt

list.sortのような並べ替え関数は、Order値を返す関数を引数に取るのが一般的で、呼び出し側がリストをどのように並べ替えるかを決められます。

list.sort([3, 7, 3, 1], by: int.compare)
// -> [1, 3, 3, 7]

説明

Toriは気候ジャーナリストで、さまざまな都市の天気についての記事を書こうとしています。Toriはいろいろな都市の天気のデータを持っていて、気温をもとにそれらの都市を順位づけしたいと考えています。ただ、気温の単位が華氏のものと摂氏のものに分かれています。そこで、気温を同じ単位に変換して順位づけるために、助けが必要です。

1. 華氏を摂氏に変換する

fahrenheit_to_celsius関数を定義してください。この関数は、華氏の気温を入力として受け取り、摂氏の気温を返します。

華氏を摂氏に変換するには、華氏の値から32を引いて、その結果を1.8で割ります。

fahrenheit_to_celsius(72.5)
// -> 22.5

2. 2つの気温を比較する

compare_temperature関数を定義してください。この関数は2つの気温を受け取り、1つ目の気温が2つ目の気温より小さいか、等しいか、大きいかを示すOrderの値を返します。

compare_temperature(Celsius(30.5), Fahrenheit(82.1))
// -> Gt

3. 気温で都市を並べ替える

sort_cities_by_temperature関数を定義してください。この関数は都市の配列を受け取り、最も寒い都市から最も暖かい都市の順に並べて返します。

sort_cities_by_temperature([
  City(name: "London", temperature: Celsius(30.5)),
  City(name: "Paris", temperature: Fahrenheit(82.1))
])
// -> [
//   City(name: "Paris", temperature: Fahrenheit(82.1)),
//   City(name: "London", temperature: Celsius(30.5)))
// ]
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Gleam Exercism

天気ランキングを始める準備はできましたか?

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