5

add1 などの言語プリミティブを使用せずに、教会の数字を整数表現に変換することは可能ですか?

私が遭遇したすべての例は、プリミティブを使用して int にデチャーチします

例:

 plus1 = lambda x: x + 1
 church2int = lambda n: n(plus1)(0)

例 2:

 (define (church-numeral->int cn)
    ((cn add1) 0))

私はマイクロ Lisp インタプリタ (John McCarthy の 10 のルールのみを使用) を試していますが、プリミティブを追加せずにそれを実行できるかどうかを理解したいと考えています。

4

2 に答える 2

2

整数数値型は、McCarthy の Lisp 初等原始手続きのリストの一部ではありません。そのレベルの関数しかなく、他のデータ型は存在しません。そのため、Lisp のそのような最小限の定義に厳密に従う場合、整数を関数として表す必要があります (たとえば、教会の数字を使用して)。したがって、答えはノーです。まだ存在しないデータ型に変換することはできません。

ここで、整数をアトムとして言語に追加するとします (言語に新しいデータ型を追加することは、前述の 7 ~ 10 の基本的な手順を超えることに注意してください)。さらに単純化するために、単一の数値、数値ゼロを追加したとします。その後、ペアノの公理に従って、残りの整数を構築するための演算が必要になりますadd1。存在する数。繰り返しになりますが、少なくともアトムとしてのゼロと関数がなければ、チャーチ数字から整数に変換することはできません。add1

于 2013-04-03T17:11:17.370 に答える