2

对于 Church 数字的后继和前任,我有以下代码:考虑以下代码:

(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然后它评估返回原始值的主体。

功能

(define (pred x) (x))

将一个值作为输入并将其绑定为参数x。然后它评估身体(x)。该表达式(x)表示不带参数的调用(希望是一个函数)x

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

因此,在您的编码上下文中,(lamdda () x)包装了一个函数层一个值并(x)删除了函数层。

于 2020-03-09T15:18:38.977 回答