如何从折叠开始定义地图?
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))
想想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
以及添加的任何功能。因此,当您将 f
传递给 map
时,传递给 foldr
的函数需要 cons
(f element)
的结果与累加器。祝你好运!
我正在研究 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))
想想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
以及添加的任何功能。因此,当您将 f
传递给 map
时,传递给 foldr
的函数需要 cons
(f element)
的结果与累加器。祝你好运!