memoizeと不動点

[id:lethevert:20050902:p2]
[id:SaitoAtsushi:20050903]

(define (fix g)
  (begin
   (define (f x) (f x))
   (set! f (g f))
   f))

やっぱり、Schemeだったら書けるんですねぇ。
でも、「(set! f (g f))」が、あー、という感じ。なんか、代入していることがばればれな感じですね。仕方ないですけど。
JavaScriptの「f = G(f)」という書き方が、宣言的な表現に見えることが気に入っているんですよね。

      • -

Cleanでがんばってみた。

fix g
    # f = fix g
    # f = g f
    = f

「f = fix g」が・・・