1

私は、Scheme を通じて教会のエンコーディングの原理全体を理解しようとしています。などの基本は理解できたと思います。

  • 0 の教会数字

    (定義 c-0 (ラムダ (f) (ラムダ (x) x)))

  • 1の教会数字

    (定義 c-1 (ラムダ (f) (ラムダ (x) (fx))))

...そして、関数を x N 回適用し続けます。

今私の問題は、これが何を意味するのかということです。たとえば、church-3 を例にとると、次のようになります。

(define c-3
  (lambda (x)
    (lambda (f)
      (f (f (f x))))))

これは実際に何をしているのですか?私も基本的なスキームの知識しか持っていませんが、関数の使用方法さえ理解していませんか? c-3 関数を使用した入力例は何ですか? ループのように3回適用するだけですか?

4

1 に答える 1

1

あなたが正しいです。この場合の c-3 は、1 つの引数を取る関数です。そして、別の関数を返します。この他の関数は、引数が 1 つの関数を取り、それを最初の引数に適用します。

この例では、引数 3 で c-3 を呼び出しています。これは関数を返します。次に、x に 1 を加算するこの関数 (別の関数) をフィードします。

((c-3 3) (lambda (x) (add1 x)))
6

これは6ご覧のとおりになります。add1 を 3 に 3 回適用します。私はこれが紛らわしいことを知っています。ただし、関数本体の引数を手動で置き換えて、理解を深めることができます。f が表示されているところはどこでも、それを(または任意の数字)に(lambda (x) (add1 x))置き換えてください。x3

これは、引数が正しい型である限り、任意の 1 引数関数で機能します。

于 2014-10-29T17:15:28.857 に答える