2011-01-14 12 views
5

固定小数点コンビネータが何であるかを知るために、私は自分自身で書きました。しかし、その代わりに厳密に匿名関数でそれを書き込むので、Wikipedia's exampleのように、私はちょうど使用定義:YコンビネータをSchemeで定義する

(define combine (lambda (functional) 
        (functional (lambda args (apply (combine functional) args)))) 

私は階乗とフィボナッチのための汎関数でこれをテストしてみた、動作しているようです。これは固定小数点コンビネータの正式な定義を満たしていますか?

+0

演習2: 'define'や' letrec'を使わないYコンビネータ:) – leppie

答えて

3

「組み合わせ」は無料ですので、the blog referred to in the previous answerによると、それも、コンビネータの定義を満たしていないので答えは、ないです変数。

+2

それを指摘してくれてありがとう。ブログの定義が正しいことを確認するには、ウィキペディアの定義と同じだと考えていますか?「コンビネータは、機能アプリケーションと以前に定義されたコンビネータだけを使用してその引数から結果を定義する高次関数です。 http://en.wikipedia.org/wiki/Combinatory_logicを参照してください。 – AlcubierreDrive

5

編集:chesswebまたは他の誰かが彼の答えを確証している間、一時的に彼の答えを正しく考えてみてください。


答えははいです。どうやらまったく同じコンビネータは途中でページの下、hereを表示されません:

(define Y 
    (lambda (f) 
     (f (lambda (x) ((Y f) x))))) 
+0

するべきではありません。あなた自身の質問に答えることをお勧めします。 IIRCでは、あなたがそれを与えた2日後にあなた自身の答えを受け入れることができます。 –

+0

@ Yasir素晴らしい、ありがとう! – AlcubierreDrive

+1

Yコンビネータを教えることの主なポイントは、ちょうど関数を使って再帰を実装する方法を見てみることです。再帰的な定義を書くことによって、あなたはそれをすることができません - あなたは何かで動作するようになりますが、Yが何をすべきかを理解する上でのみ役に立ちます。 Mikeのテキストは、それについて深く読んで、 'define'-less版がどのように得られているかを知る良い場所になるでしょう。 –

関連する問題