いろいろ

Smileys Triangle がやっと追い付いた(63B)。Statistics も同じ。
echo が 1 バイト届かない。おかしいなあ。
Evil C Compiler は厳しい。RubyPerl は入力を適当に置換して eval してるんだと思う。こっちも Toploop モジュールで eval みたいなことはできなくもないが、決め打ちのほうが多分短くなるはず。

http://d.hatena.ne.jp/KeisukeNakano/20070314/1173846972
なるほど、参考になります。でも 2 番目の

  • apply_3 で f を呼ぶときにはオプショナル引数を省略しているから,apply_3 f は int 型.
  • apply_3 で f を呼んでも部分適用かもしれないので,apply_3 f は ?i:int -> int 型.

のところがまだよく分かっていません。

# (fun ?i:(i=0) x y -> x) 7;;   
- : '_a -> int = <fun>

の場合 ?i は消えてますが、そういう問題ではないのかな。
メイリングリスト似たような問題があったが、微妙に違うみたい。

交通事故

家の前で事故があった。三時半ごろ、凄い音がして家が揺れたので外に出てみると、車の窓ガラスは粉々に散らばっていて電灯も倒れている。ドライバーは重体のようだ。
普段交通事故のニュースなんて聞き流しているが、いざ自分の身の回りに起こると大騒ぎしてしまうものだ。事故は恐ろしい。

Hash

Ruby の Hash で

文字列をキーとして与えると、文字列をコピーし、コピーを更新不可に設定(freeze)してキーとして使用します。

プログラミング言語 Ruby リファレンスマニュアル

という仕様にひたすらハマる。むー。

オプション引数

$ocaml
        Objective Caml version 3.09.3

# let f x y = failwith (x^y);;
val f : string -> string -> 'a = 
# (fun g -> g "foo" "bar") f;;
Exception: Failure "foobar".

OK。

# let f ?(a=0) x y = x ^ y;;
val f : ?a:int -> string -> string -> string = <fun>
# (fun g -> g "foo" "bar") f;;
- : string = "foobar"

これも OK。しかし次でエラーになる。

# let f ?(a=0) x y = failwith (x^y);;
val f : ?a:int -> string -> string -> 'a = 
# (fun g -> g "foo" "bar") f;;
This expression has type ?a:int -> string -> string -> 'a
but is here used with type string -> string -> 'b

うーん、これは通ってもいいと思うんだけどなあ。次のようにすると通る。

# (fun g -> g "foo" "bar") (f : ?a:int -> string -> string -> string);;
Exception: Failure "foobar".

るびま 18 号

Rubyist のための他言語探訪 【第 11 回】 C++

静的型言語は型が適合しなければポリモルフィズムを発揮できませんから、ある機能を呼び出すためにはかならず共通のスーパークラスを持つ必要があります。

ううむ。これはちょっと。