LoginSignup
0
0

《プログラミングの基礎》をReScriptで読む 第8章

Posted at

《プログラミングの基礎》はとても良い本です。
サンプルプログラムを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,    // 所要時間
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0