1

我正在使用 Htdp 2e,并且遇到了从 foldr 或 foldl 定义 map 函数的问题。我不知道从哪里开始。

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))
4

1 回答 1

4

想想foldr和之间的主要区别map

(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)祝你好运!

于 2019-08-25T23:47:15.403 回答