「プログラミングの基礎」第9回(2/8)

Posted on by 1 comment

参加者 沼田(読み手)、今井(記)
範囲 pp.85-99

第9章 リスト

  • 9.6 テンプレートの複合
    • p.87 中ほど「横に横に延びすぎる…」
      確かにインデントが深くはなるが、p.87上のコードでは二つ目のmatchの次の行のインデントが深すぎ。一つ目のmatchと同様に考えれば、行頭空白6つので良いはず。
  • 9.7 駅名リストと駅間リストの整備
    • p.89 問題9.9
      きっとどこかからデータをもらって加工したんだろうね。kanaがひらがななのは元データがひらがなだったからかな。
    • p.90 問題9.10
      • 片方向データで両方向表現するが、メトロネットワークに逆方向がない路線は無い? 一般的な鉄道路線だと有ると思う。
      • 隣の駅との間だけなのに、keiyuってちょっと違和感

第10章 再帰関数を使ったプログラミング

  • 10.1 関数のネスト
  • 10.2 リストの中の最小値を求める関数
  • 10.3 局所変数定義
    • p.99 上のコード
      この場合は、

      let x = 3 and y = 4 in x + y ;;

      で良い。(本書でandはでてきていないが)

One comment on “「プログラミングの基礎」第9回(2/8)

  1. p.94 問題10.2、少しわかりにくかったようなので解いてみました。
    問題10.1で作るinsertを使うので、まずは問題10.1から、

    問題10.1

    (* 目的 : 昇順整数リストlstと整数nを受け取り
       昇順となる位置にnを挿入したリストを返す *)
    (* insert : int list -> int -> int list *)
    let rec insert lst n = match lst with
        [] -> [n]
      | first :: rest ->
        if n <= first then
          n :: lst
        else
          first :: insert rest n
    
    (* テスト *)
    let test1 = insert [] 5 = [5]
    let test2 = insert [3] 5 = [3;5]
    let test3 = insert [7] 5 = [5;7]
    let test4 = insert [3;5] 1 = [1;3;5]
    let test5 = insert [3;5] 4 = [3;4;5]
    let test6 = insert [3;5] 7 = [3;5;7]
    let test7 = insert [3;5;7] 5 = [3;5;5;7]
    let test8 = insert [1;3;4;7;8] 5 = [1;3;4;5;7;8]

    問題10.2

    (* 目的 : 整数リストlstを受け取り
       それを昇順に整列したリストを返す *)
    (* ins_sort : int list -> int list *)
    let rec ins_sort lst = match lst with
        [] -> []
      | first :: rest -> insert (ins_sort rest) first;;
    
    (* テスト *)
    let test1 = ins_sort [] = []
    let test2 = ins_sort [5] = [5]
    let test3 = ins_sort [3;5] = [3;5]
    let test4 = ins_sort [5;3] = [3;5]
    let test5 = ins_sort [3;5;7] = [3;5;7]
    let test6 = ins_sort [3;7;5] = [3;5;7]
    let test7 = ins_sort [5;3;7] = [3;5;7]
    let test8 = ins_sort [5;7;3] = [3;5;7]
    let test9 = ins_sort [7;3;5] = [3;5;7]
    let test10 = ins_sort [7;5;3] = [3;5;7]
    let test11 = ins_sort [2;3;4;2;3;4] = [2;2;3;3;4;4]
    let test12 = ins_sort [5;3;8;1;7;4] = [1;3;4;5;7;8]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA