Вернуть что-то, заключенное в скобки в схеме - PullRequest
2 голосов
/ 09 марта 2020

У меня есть следующий фрагмент кода для преемника и предшественника церковных цифр: Рассмотрим следующий код:

(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) синтаксически и логически?

1 Ответ

0 голосов
/ 09 марта 2020

Функция

(define (pred x) x)

является функцией идентификации. Функция принимает значение и связывает его с аргументом x. Затем он вычисляет тело x, которое возвращает исходное значение.

Функция

(define (pred x) (x))

принимает в качестве входных данных одно значение и связывает его с аргументом x. Затем он оценивает тело (x). Выражение (x) означает вызов (мы надеемся, что это функция) x без аргументов.

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

Так что в контексте вашей кодировки (lamdda () x) оборачивает функциональный слой значением, а (x) удаляет функциональный слой.

...