7

私は関数型プログラミングのスキームに本当に慣れていません。最近、ラムダ計算で Y コンビネーター関数に出くわしました。このようなものY ≡ (λy.(λx.y(xx))(λx.y(xx)))です。スキームで実装したかったので、たくさん検索しましたが、上記の構造と完全に一致する実装は見つかりませんでした。私が見つけたそれらのいくつかを以下に示します。

(define Y
(lambda (X)
  ((lambda (procedure)
     (X (lambda (arg) ((procedure procedure) arg))))
   (lambda (procedure)
     (X (lambda (arg) ((procedure procedure) arg)))))))

(define Y
  (lambda (r)
    ((lambda (f) (f f))
     (lambda (y)
       (r (lambda (x) ((y y) x)))))))

ご覧のとおり、これらはこのY ≡ (λy.(λx.y(xx))(λx.y(xx)))コンビネーター関数の構造と一致しません。まったく同じ方法でスキームに実装するにはどうすればよいですか?

4

1 に答える 1