sicp 习题2.33

map 的原始定义

(define (map p sequence)
    (if (null? sequence)
        '()
        (cons (p (car sequence))
              (map p (cdr sequence)))))

accumulate 的定义

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence)))))

原题

(define (map p sequence)
  (accumulate (lambda (x y) <???>) nil sequence))

将原题中的 accumulate 用定义daihuan代换 (lambda (x y) <???>)  => op   nil => initial   sequence => sequence 

得到下面这段代码

(define (map p sequence)
  (if (null? sequence)
      '()
      ((lambda (x y) <???>) (car sequence)
      (accumulate (lambda (x y) <??>) '() sequence))))

通过将这个展开式和原本  map  的定义对比可以看出,我们只要让  (lambda (x y) <??>)  中的  <??>  的作用等同于  (cons (p x) y)  即可,因此,这个答案的解为  (lambda (xy) (cons (p x) y))  。

以下是完整定义:

(define (map p sequence)
    (accumulate (lambda (x y) 
                    (cons (p x) y)) 
                '()
                sequence))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值