Reading:オブ脳本(6)社長命令・起立!(OCaml編)

MLとかどうかなってことでOCamlでも書いてみました。型推論型推論。ああ何年ぶりに書いただろうか…

http://www.ocaml-tutorial.org/ja/objects

を参考に書きました。自信なし!(っていうかMLっぽくないっすね)

shain.ml

class virtual shain =
  object (self)
    val mutable kihonkyu = ( 0 : int )
    method set_kihonkyu x = kihonkyu <- x
    method get_kihonkyu = kihonkyu
    method get_bonus = kihonkyu * 3
    method virtual stand_up : unit
    method virtual get_kyuryo : int
  end

class tanto =
  object (self)
    inherit shain as super
    method stand_up =
      Printf.printf "担当が普通に起立しました。\n"
    method get_kyuryo = super#get_kihonkyu
  end

class shunin =
  object (self)
    inherit shain as super
    method stand_up =
      Printf.printf "主任がすばやく立ちました。\n"
    method get_kyuryo = super#get_kihonkyu * 2 + 1
  end

class shacho =
  object (self)
    method meirei ( s : shain ) kihonkyu =
      s#set_kihonkyu kihonkyu;
      s#stand_up;
      Printf.printf "私の給料は%d円です。\n" s#get_kyuryo;
      Printf.printf "ボーナスは%d円です。\n" s#get_bonus
  end

let a = new tanto;;
let b = new shunin;;

let c = new shacho;;
c#meirei a 100;;
c#meirei b 100;;

実行結果

$ ocamlc shain.ml -o shain
$ ./shain
担当が普通に起立しました。
私の給料は100円です。
ボーナスは300円です。
主任がすばやく立ちました。
私の給料は201円です。
ボーナスは300円です。

実行環境セットアップ方法(おまけ)

debian なので楽ちんです。いつもの

$ sudo aptitude install ocaml

以上。

$ ocaml -version
The Objective Caml toplevel, version 3.10.1