scheme中map的处理

map是处理list的一个比较简便的方式,通过map可以省去挨个对list元素的处理,强调元素表到结果表的一个变换。
(define (scale-list items factor)
(if (null? items)
nil
(cons (* (car items) factor)
(scale-list (cdr items) factor))))
(define (map proc items)
(if (null? items)
nil
(cons (proc (car items))
(map proc (cdr items)))))
如上述定义的两个函数,map和scale-list的作用是一样的,都是对表进行遍历,但map不需要挨个对元素进行操作,只要代入需要对元素进行的处理和元素表即可输出结果表。

练习2.21 过程square-list以一个数值表为参数,返回每个数的平方构成的表:

点击查看代码
;传统处理
(define (square-list items)
    (if (null? items)
        nil
        (cons (square (car items))
              (square-list (cdr items)))))
;map处理
(define (square-list items)
    (map (lambda (x) ( square x))
          items))
练习2.22 louis要重写square-list函数,化作迭代形式并输出结果,但他发现输出结果是反过来的,需要解决。 代入上一节里写的reverse函数就能解决了。

练习2.23 过程for-each和map类似,但它只从左到右应用于各个元素,将过程作用于元素得到的值都抛弃不用。

点击查看代码
> (define (for-each f items)
      (cond ((not (null? items))
              (f (car items))
              (for-each f (cdr items))
              )))
> (for-each (lambda (x) (newline) (display x))
      (list 57 321 88))

57
321
88
posted @ 2025-12-12 20:51  檐上落白luckin  阅读(3)  评论(0)    收藏  举报