Scheme / DrRacket - 使用foldr映射函数

时间:2014-11-13 20:54:55

标签: scheme racket currying

我必须使用foldr编写自己的map函数。

想到的最简单的解决方案是:

(define (my-map f lst)    
 (foldr (lambda (x y) (cons (f x) y)) empty lst))

但是,我应该在不使用lambda(或任何类型的辅助函数),递归或任何非折叠抽象列表函数的情况下执行此操作。

我也有以下问题(我无法修改):

(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))。我到底该怎么做呢?

1 个答案:

答案 0 :(得分:5)

尝试

(define (my-map f lst)    
  (foldr (uncurry (compose (curry cons) f))
         empty lst))