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



我正在通过 Htdp 2e 工作,并且遇到了从折叠器或折叠定义映射函数的问题。我不知道从哪里开始。

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

我的问题是我如何获取 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以及添加的任何函数。因此,当您传递fmap传递给foldr的函数需要cons累加器(f element)的结果。祝你好运!