「プログラミングの基礎」第6回(1/29)

Posted on by 1 comment

参加者 今井(読み手)、沼田(記)
範囲 pp 50 – 60

第7章 関数の定義

  • 7.1 組の構文
    • 問題7.1
      まだこの本では出てきていないが、平均を求めるのであれば、整数を実数にしたい。
  • 7.2 パターンマッチ
    • パターン変数
      仮引数のようなものなのでaやbじゃなくてもいい。
  • 7.3 構造データに対するデザインレシピ
    • 問題7.4

      # let chuten points = match points with
      ((x1,y1),(x2,y2)) -> ((x1+x2)/2,(y1+y2)/2);;
      val chuten : (int * int) * (int * int) -> int * int =
      # chuten ((1,2),(3,4));;
      – : int * int = (2, 3)

  • 7.4 パターンマッチの実行方法
  • 7章では出てこなかったが、パターンではいろいろなことができる。扱うのも組とは限らない。

    # let foo pair = match pair with
    | (1, s) -> “one”^s
    | (2, s) -> “two”^s
    | (_, _) -> “bye”;;
    val foo : int * string -> string =
    # foo (1,” scoop of icecream”);;
    – : string = “one scoop of icecream”
    # foo (3, ” bananas”);;
    – : string = “bye”

    のように定数と変数を組み合わせたり

    # let bar i = match i with
    | 1 -> “one”
    | 2 -> “two”
    | _ -> “other”;;
    val bar : int -> string =
    # bar 0
    ;;
    – : string = “other”
    # bar 1;;
    – : string = “one”

    のようにswitch文のようなこともできる。

第8章 レコード

  • 8.1 レコードの必要性
  • 8.2 レコードの構文
    • フィールド
      OCamlでは同じフィールドを持つ別のレコードの型はつくれない(はず)

One comment on “「プログラミングの基礎」第6回(1/29)

  1. 組から要素を取り出すのは、matchを使わない方法もあります。
    これもパターンマッチングで、組から要素を取り出すときはこちらの方が楽です。

    # let p = (1,2);;
    val p : int * int = (1, 2)
    # let (x,y) = p;;
    val x : int = 1
    val y : int = 2
    #

    例えば、問題7.4は(実数化は別として)
    以下のようにも書くこともできます。

    # let chuten points =
    let ((x1,y1),(x2,y2)) = points
    in
    ((x1+x2)/2,(y1+y2)/2);;
    val chuten : (int * int) * (int * int) -> int * int = <fun>
    # chuten ((1,2),(3,4));;
    - : int * int = (2, 3)

    また、点1と点2を組にするのは…と考えると、

    # let chuten p1 p2 =
    let (x1,y1) = p1
    and (x2,y2) = p2
    in
    ((x1+x2)/2, (y1+y2)/2)
    ;;
    val chuten : int * int -> int * int -> int * int = <fun>
    # chuten (5,6) (7,8);;
    - : int * int = (6, 7)
    #

コメントを残す

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

CAPTCHA