2

教会の数字の後継者と前身者の次のコードがあります。次のコードを検討してください。

(define zero (lambda () '() ))   ; Initialize Church numeral zero as nil
(define (succ x) (lambda () x))  ; Wraps x with another function and returns it
(define (pred x) (x))            ; "Unwraps" one shell function of x and returns it

(define one (succ zero))         ; gives me the Church numeral one
(pred one)

pred 関数で次の変更を行うとします。

(define (pred x) x)

x と (x) を返すことの違いは何ですか? (x) を返すことは、構文的および論理的に正確に何を意味しますか?

4

1 に答える 1

0

関数

(define (pred x) x)

恒等関数です。この関数は値を受け取り、それを引数にバインドしますxx次に、元の値を返すbody を評価します。

関数

(define (pred x) (x))

入力として 1 つの値を取り、それを引数にバインドしますx。次に body を評価します(x)。この式(x)は、引数なしの呼び出し (できれば関数)xを意味します。

(pred (lambda () 42)) will evaluate to 42.

したがって、エンコーディングのコンテキストでは(lamdda () x)、関数レイヤーを値でラップし、関数レイヤーを(x)削除します。

于 2020-03-09T15:18:38.977 に答える