lambda函数的特性
通过对过程的逐步抽象,不难看出过程可以演化为某种模式,因此在新的章节。我们将在数据上做同样的抽象。
此处引入数对的概念来表达有理数,即通过基础过程cons,表达一个有序的数对:(define x (cons n d))
通过该数对,可以完成对数据的抽象。
点击查看代码
;分数的加法
(define (add-rat x y)
(make-rat (+ ( * (number x) (denom y))
( * (number y) (denom x)))
(* (denom x)(denom y))
)
)
;简化分数
(define (gcd a b)
(if (= b 0)
a
(gcd b (remainder a b))
))
(define (number x)
(let ((g (gcd (car x)(cdr x))))
(/ (car x) g)))
(define (denom x)
(let ((g (gcd (car x)(cdr x))))
(/ (cdr x) g)))
序对的形式除了表达分数以外,还可以表达图形,例如通过坐标来表达线段两端的位置。
点击查看代码
;线段表达
(define (make-segment x1 y1 x2 y2)
(start-segment x1 y1)
(end-segment x2 y2)
)
;起点和终点的表达
(define (start-segment x y)
(cons x y)
)
(define (end-segment x y)
(cons x y)
)
在数据抽象的过程中,意外发现了lambda函数的一些特性,除了之前介绍的省略定义内容直接为某个变量构造函数的作用外,lambda还有以下特性:
1、lambda可以嵌套在其他lambda函数内部
根据练习2.4的要求,其定义了一个过程,
点击查看代码
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda(p q) p)))

浙公网安备 33010602011771号