2006-06-12
■ IDE

結局、eclipsefpはEclipseの使い方がよくわからないので、Visual Studio 2003を探してきて(押入れにあった)、Virtual PCにインストールすることにし、Visual Haskellを使ってみることに決めた。Visual Haskellがダメなら、しかたがないMeadowかxyzzyでHaskell modeを使うことにしよう。
で、現在Visual Studioのインストール中。
■ Polymorphic Recursion

OCamlのletはデフォルトで再帰関数を定義できないのでちょっとびっくり。大丈夫なんかな。というのは、ML多相の範疇では、再帰関数は定義の中では多相的に利用できないから。多相性が制限され過ぎそうな気がしてしまう。
実は、HaskellはPolymorphic Recursionがあるので大丈夫。再帰関数も多相型が推論される。
module Main where main = do print $ f 1 print $ g "b" id' x = x f x = id' 1 + x g x = id' "a" ++ x
ここで、id'がfとgの中でそれぞれ多相的に利用されていることがポイント。
let rec id' x = x and f x = id' 1 + x and g x = id' "a" ^ "b" let _ = begin Printf.printf "%d\n" (f 1); Printf.printf "%s\n" (g "b"); end
としてもエラーになる。
と思ったんだけど本当だろうか。上のプログラムだと、本質的には相互再帰的ではないので、順に宣言していくプログラムに書きなおせるはず。うーん、ちょっと気になるな。
コメント