memoizeと不動点の追記

[id:lethevert:20050904:p3]
Concurrent Clean版の

fix :: ( (Int -> Int) -> (Int -> Int) ) -> (Int -> Int)
fix maker = f
where
    f = maker f

と、JavaScript, Scheme版のそれ

function fix(G)
{
  function f(x) { return f(x) }
  f = G(f)
  return f
}
(define (fix g)
  (begin
   (define (f x) (f x))
   (set! f (g f))
   f))

は、よく考えると意味が違いますね。
つまり、Clean版は、局所的に定義された「f = maker f」という再帰関数を返値として返しているのに対し、JavaScript版とScheme版は、「f = G(f)」は代入です。
そういうことから、Clean版は、意味的に分かりやすいですが、JavaScript版とScheme版は、ちょっと分かりにくいように思います。