如何测试 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
假设我们有一种不支持数字或布尔值的编程语言: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