如何从折叠开始定义地图?

How do I start defining map from fold?

我正在研究 Htdp 2e,遇到了从 foldr 或 foldl 定义地图函数的问题。我不知道从哪里开始。

Map接受一个参数和一个列表的函数。所以我定义了我的 功能类似。 Fold 需要一个有两个参数的函数,一个基数和一个列表。

我的问题是如何获取 map 的单参数函数并使用折叠的双参数函数重新创建它?

该问题的目的是教授如何使用高阶函数创建抽象。

一些正确方向的推动将不胜感激

; [X Y] [X -> Y] [List-of-X] -> [List-of-Y]
; consumes a function and a list and applies f 
; to each item in the list

(define (map-from-fold f l)
    (foldr f base lx))

想想foldrmap的主要区别:

(map add1 '(1 2 3))  
; == (cons (add1 1) (cons (add1 2) (cons (add1 3) '())))

(fold f '() '(1 2 3) 
; ==> (f 1 (f 2 (f 3 '())))

请注意 f 需要 cons 以及添加的任何功能。因此,当您将 f 传递给 map 时,传递给 foldr 的函数需要 cons (f element) 的结果与累加器。祝你好运!