我必须使用 foldr 编写自己的 map 函数。
想到的最简单的解决方案是:
(define (my-map f lst)
(foldr (lambda (x y) (cons (f x) y)) empty lst))
但是,我应该在不使用 lambda(或任何类型的辅助函数)、递归或任何非 foldr 抽象列表函数的情况下执行此操作。
我还有以下问题(我无法修改):
(define (compose f g)
(lambda (x) (f (g x))))
(define (curry f)
(lambda (x) (lambda (y) (f x y))))
(define (uncurry f)
(lambda (x y) ((f x) y)))
我的猜测是我必须使用上述函数做一些等同于 (lambda (x y) (cons (f x) y)) 的事情。我究竟该怎么做呢?
最佳答案
尝试
(define (my-map f lst)
(foldr (uncurry (compose (curry cons) f))
empty lst))
关于Scheme/DrRacket - 带 foldr 的 map 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918223/