练习 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) ))))))))
相关文章推荐
- 用环境模型来理解javascript中的闭包
- 对嵌套映射的理解
- SICP Exercise 1.13
- sicp习题答案和范例代码 - 第一章
- sicp习题答案和范例代码 - 第二章 2.1
- SICP第一章——构造过程抽象之程序设计的基本元素(1.1)笔记及习题解答
- SICP-《计算机程序的构造和解释》之习题分析与收获——练习1.30
- SICP-《计算机程序的构造和解释》之习题分析与收获——练习1.29
- 游走于数据与代码之间
- 换零钱问题迭代解法
- Structure and Interpretation of Computer Programs 读书笔记
- 应用序和正则序
- [SICP Notes] 1.1 The Elements of Programming
- 《计算机程序的构造与解释》习题自编代码(第1章)(未完待更)
- 【Structure and interpretation of Computer Programs 】学习记录兼导言
- 第一章笔记整理
- SICP-练习2.34
- SICP-练习2.17
- 计算斐波纳契数,分析算法复杂度
- SICP-求幂