关闭

练习 2.6

标签: sicp
121人阅读 评论(0) 收藏 举报
分类:
#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)
                              ))))))))
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7025次
    • 积分:720
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:7篇
    • 译文:27篇
    • 评论:0条