如何测试 lambda 函数?

How to test lambda functions?

假设我们有一种不支持数字或布尔值的编程语言:lambda 是它提供的唯一值。

教会数字使用 lambda 表达式来表示数字。这个想法与自然数的函数表示密切相关,即有一个表示“零”的自然数和一个函数“succ”,returns 是给定自然数的后继。

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

如果我还有一个lambda

(define pluss4 (lambda(x) (+ x 4))

我可以这样测试它:(pluss4 0) 我看到答案是 4

如何测试教会数字并查看结果?

要将教堂编号转换为整数,您只需像这样应用它:

(define (add1 n) (+ n 1))         ; In SICP it's called 1+
((zero add1) 0)                   ; ==> 0
(((add-1 (add-1 zero)) add1) 0)   ; ==> 2

你可以把它变成一个程序:

(define (church->int x)
  ((x add1) 0))

(church->int zero)                  ; ==> 0
(church->int (add-1 (add-1 zero)))  ; ==> 2