On Mon, 10 Nov 2003 20:26:28 +0900, Tanaka Akira <akr / m17n.org> wrote:
> これは rec を付ければ定義できます。
>
> # let rec y f = f (y f);;
> val y : ('a -> 'a) -> 'a = <fun>
>
> これは let で定義した変数のスコープは let の body には及ばないからです。
> ちなみに Scheme も同様で、そういうときは、letrec を使います。

ああっ!
rec のことをすっかり忘れていました。


すると、こっちも通りますか。
(前回のは SML のコードを OCaml に移すときのミスです。)
>>> fun fix h  = let fun f () = h f () in f end
> let fix h  = let fun f () = h f () in f ;;

# let fix h  = let fun() -> rec f () = h f () in f ;;
val fix : ((unit -> 'a) -> unit -> 'a) -> unit -> 'a = <fun>

すると、再帰定義ができないというのは、無限ループになってしまうため
というところに収束してしまいそうな感じですね。

-- 
shelarcy <shelarcy / capella.freemail.ne.jp>
http://page.freett.com/shelarcy/ 

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/