您的位置:首页 > 其它

【SICP练习】62 练习2.33

2015-02-22 13:56 288 查看


练习2.33

既然要用到accumulate,那么我们先来回顾一下这个函数好了。其有三个参数,一个操作符,一个用来作为初始化的值,一个是需要运算的序列。题目中的map已有的定义如下:

(define (map p sequence)

(accumulate (lambda (x y) <??>)

nil

sequence))

这里的nil也是’(),其作为accumulate的参数initial。后面的sequence也就是accumulate的参数sequence。那么lambda表达式里要做的就是处理这些东西了。我们用map的参数来处理初始值,然后将其用cons组合。而很明显的,nil对应于x,seguence对应于y。于是乎。

(define (map p sequence)

(accumulate (lambda (x y)

(cons(p x) y))

nil

sequence))





虽然不太规范,但意思就是这么个意思。

下面的append就比较简单了,往前翻到第68页最下面有其的定义,但不看也知道,就是将两个表组合到一起嘛。而题中已经有了cons,那不就有了么。

(define (append seq1 seq2)

(accumulate cons <??> <??>))

同样在第68页也有length的定义。其实这三个小题的难点以及出题的目的都是在于accumulate。通过不断的将sequence不断的car,并且累计计数加1就可以得出length了。

(define (length sequence)

(accumulate (lambda (x y) (+ 1 y))

0

sequence))

如果有兴趣可以直接再写写append和length的展开式之类的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: