您的位置:首页 > 其它

练习 2.6

2016-05-31 22:04 134 查看
#lang racket

;: zero 是一个函数,这个函数,接收一个参数,
;: 再返回一个函数 zero-b 此函数接收一个参数,并直接返回这个参数
(define zero (lambda (f) (lambda (x) x)))
;: 测试
;:((zero 3) 2) ;: => 2

;: +1 函数
;: 是一个函数,接收一个参数 n
;: 再返回一个函数 add-1-b 此函数接收一个函数 f
;:    返回一个新函数 add-1-c 此函数接收一个函数 x
;:        调用此函数,会(f ((n f) x))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
;: 定义one
;:(define one (add-1 zero))
;:(add-1 zero)
;:(lambda (f) (lambda (x) (f ((zero f) x))))
;:(lambda (f) (lambda (x) (f
;:                         ((zero f) x) ;: 这句返回x
;:                         )))

;:(lambda (f) (lambda (x) (f x)))
;: 所以这就是 one 的定义
(define one (lambda (f) (lambda (x) (f x))))
;: 定义解释: 一个函数,参数是另一个函数f,返回一个函数one-b;
;: 调用one-b 输入参数 x, 最终结果是 (f x)
;: ((one (lambda (x) (display x))) 1)

;: two 的定义
(add-1 one)
(lambda (f) (lambda (x) (f
((one f) x) ;: => (f x)
)))
;: 所以 two的定义是
(lambda (f) (lambda (x) (f (f x))))
;: three
(lambda (f) (lambda (x) (f (f (f x)))))
;: four
(lambda (f) (lambda (x) (f (f (f (f x))))))

;: +法的定义就是 加几,就多几个 (f ) 次调用
(define + (a b)
(lambda (f) (lambda (x)
(f (f (f ;: a 次 f
(f ( f (f ;:... b 次f
x)
))))))))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sicp