soutaroのHaskellにっき

2006-06-12

IDE IDE - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - IDE - soutaroのHaskellにっき

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

で、現在Visual Studioインストール中。

ところで、いつになったら、Haskellプログラミングを始められるんでしょう。

Visual Haskell Visual Haskell - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - Visual Haskell - soutaroのHaskellにっき

結局、Visual Haskell

入力補完も効くみたいだし、シンタクスのチェックもしてくれるし、まあいいだろう。

Polymorphic Recursion Polymorphic Recursion - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - Polymorphic Recursion - soutaroのHaskellにっき

Haskellのwhere以下は相互再帰的に処理される。

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の中でそれぞれ多相的に利用されていることがポイント

OCamlで同じプログラムにしようとして、

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

としてもエラーになる。

と思ったんだけど本当だろうか。上のプログラムだと、本質的には相互再帰的ではないので、順に宣言していくプログラムに書きなおせるはず。うーん、ちょっと気になるな。

よし よし - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - よし - soutaroのHaskellにっき

明日からMLインタプリタを書いてみよう。