《プログラミングの基礎》はとても良い本です。
サンプルプログラムをReScriptで書いて、プログラミングの基礎とReScriptを学びます。
環境
- macOS Sonoma(バージョン 14.4.1)
- ReScript 11.1.0-rc.8
- @rescript/core 1.2.0
第8章
問題 8.5で駅名の情報を格納するekimei_t
型、問題 8.7で駅と駅の接続情報を格納するekikan_t
型を定義します。
Ex08_1.res
// 本に関する情報を格納するレコード
type book_t = {
title: string, // タイトル
author: string, // 著者
publisher: string, // 出版社
price: int, // 値段
isbn: string // ISBN
}
Ex08_2.res
// お小遣い帳の情報を格納するレコード
type okozukai_t = {
mono: string, // 買ったものの名前
nedan: int, // 値段
basho: string, // 買った場所
hizuke: string // 買った日付け
}
Ex08_3.res
// 人に関する情報を格納するレコード
type person_t = {
name : string, // 名前
shincho : float, // 身長
taiju : float, // 体重
tsuki : int, // 誕生月
hi : int, // 誕生日
ketsueki : string // 血液型
}
Ex08_4.res
open Ex08_3
// 目的:person_t 型のデータから血液型を示す文を返す
// ketsueki_hyoji : person_t -> string
let ketsueki_hyoji = (person) => switch person {
| {name: n, ketsueki: k} =>
n ++ "さんの血液型は " ++ k ++ " 型です"
}
let person1 =
{name: "浅井",
shincho: 1.72,
taiju: 58.5,
tsuki: 9,
hi: 17,
ketsueki: "A"
}
let person2 = {
name: "宮原",
shincho: 1.63,
taiju: 55.0,
tsuki: 6,
hi: 30,
ketsueki: "B"
}
let person3 = {
name: "中村",
shincho: 1.68,
taiju: 63.0,
tsuki: 6,
hi: 6,
ketsueki: "O"
}
// テスト
Console.log(ketsueki_hyoji(person1) == "浅井さんの血液型は A 型です")
Console.log(ketsueki_hyoji(person2) == "宮原さんの血液型は B 型です")
Console.log(ketsueki_hyoji(person3) == "中村さんの血液型は O 型です")
Ex08_5.res
// 駅名の情報を格納するレコード型
type ekimei_t = {
kanji: string, // 漢字の駅名
kana: string, // 読み
romaji: string, // ローマ字
shozoku: string // 所属路線名
}
Ex08_6.res
// 駅名の情報を格納するレコード型
open Ex08_5
let ekimei1 = {kanji: "茗荷谷", kana: "みょうがだに",
romaji: "myogadani", shozoku: "丸ノ内線"}
let ekimei2 = {kanji: "渋谷", kana: "しぶや",
romaji: "shibuya", shozoku: "銀座線"}
let ekimei3 = {kanji: "大手町", kana: "おおてまち",
romaji: "otemachi", shozoku: "千代田線"}
// 目的:ekimei_t 型のデータを文字列で返す
// hyoji : ekimei_t -> string
let hyoji = (ekimei) => switch ekimei {
| {kanji: k, kana: a, shozoku: s} =>
s ++ "、" ++ k ++ "(" ++ a ++ ")"
}
// テスト
Console.log(hyoji(ekimei1) == "丸ノ内線、茗荷谷(みょうがだに)")
Console.log(hyoji(ekimei2) == "銀座線、渋谷(しぶや)")
Console.log(hyoji(ekimei3) == "千代田線、大手町(おおてまち)")
Ex08_7.res
// 駅間の情報を格納するレコード型
type ekikan_t = {
kiten: string, // 起点
shuten: string, // 終点
keiyu: string, // 経由路線名
kyori: float, // 距離
jikan: int, // 所要時間
}