博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SICP学习笔记 2.1.3 数据意味着什么
阅读量:4028 次
发布时间:2019-05-24

本文共 1850 字,大约阅读时间需要 6 分钟。

    练习2.4

(define (new-cons x y)  (lambda (m) (m x y)))(define (new-car z)  (z (lambda (p q) p)))  ;; 使用代换模型,(new-car (new-cons x y))的变换过程如下(new-car (new-cons x y))==> (new-car (lambda (m) (m x y)))==> ((lambda (m) (m x y)) (lambda (p q) p))==> 此时即为使用过程(lambda (p q) p)去处理(x y)==> 即等价于定义过程		(define (test p q) p)		然后计算		(test x y)==> 所以(new-car (new-cons x y))将得到x;; 由上面的分析, 可以得到(define (new-car z)  (z (lambda (p q) q)))
 

    练习2.5

(define (new-cons a b)  (* (expt 2 a) (expt 3 b)))(define (cons-iter x k n)  (if (= (remainder x k) 0)      (cons-iter (/ x k) k (+ n 1))      n))(define (new-car z)  (cons-iter z 2 0))(define (new-cdr z)  (cons-iter z 3 0))
 

    练习2.6

(define zero (lambda (f) (lambda (x) x)))(define (add-1 n)  (lambda (f) (lambda (x) (f ((n f) x)))))  ;; 由以上定义的过程以及 1 = 0 + 1 可得如下过程(define one (add-1 zero));; 进行代入变换(add-1 zero)==> (lambda (f) (lambda (x) (f ((zero f) x))))==> (lambda (f) (lambda (x) (f ((lambda (x) x) x))))==> (lambda (f) (lambda (x) (f x)));; 则可得如下过程(define one (lambda (f) (lambda (x) (f x))));; 进而得到如下过程(define two (lambda (f) (lambda (x) (f (f x)))));; 采用代入的方式进行验证(define two (add-1 one))(add-1 one)==> (lambda (f) (lambda (x) (f ((one f) x))))==> (lambda (f) (lambda (x) (f ((lambda (x) (f x)) x))))==> (lambda (f) (lambda (x) (f (f x))));; 进而得到对于N的定义(define N (lambda (f) (lambda (x) (f (f ... (f x))))));; 则可得到如下过程(define N (lambda (f) (lambda (x) ((N f) x))));; 而对于N+M, 即为对N调用M次add-1;; 对于N+1(add-1 N)==> (lambda (f) (lambda (x) (f ((N f) x))))==> (lambda (f) (lambda (x) ((one f) ((N f) x))))(add-1 (N+1))==> (lambda (f) (lambda (x) ((two f) ((N f) x))))(add-1 (N+M))==> (lambda (f) (lambda (x) ((M f) ((N f) x))));; 所以推得加法的过程如下(define (add N M)  (lambda (f) (lambda (x) ((N f) ((M f) x)))));; 确实如书中所说:In case representing pairs as procedures wasn't mind-boggling enough, ;; consider that ......;; Alonzo Church真乃神人也!
 

转载地址:http://qavbi.baihongyu.com/

你可能感兴趣的文章
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql alter table 修改列属性的字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
单纯的把Y通道提取出来能正确显示出灰度图来为什么我的Qt就显示不出来呢转换有问题呀?
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
arm-linux开机读取硬件时钟,设置系统时钟。
查看>>
交叉编译在x86上调试好的qt程序
查看>>
/dev/input/event0 键盘输入
查看>>
qt 创建异形窗体
查看>>