Scheme/DrRacket - 带 foldr 的 map 功能

标签 scheme racket currying

我必须使用 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/

相关文章:

hash - 方案高阶函数

scheme - 我想弄清楚如何将 3 个变量合并到我的 Racket 尾递归代码中

macros - 为 xor 定义方案宏

racket - Racket 中核心功能的可变性

scheme - 从方案添加1功能到R5RS

scala - Scala 中的案例类、模式匹配和柯里化(Currying)构造函数

scheme - 为什么我在 Scheme 函数中出现 `Generic operator inapplicable` 错误

racket - 为什么 Racket 中缺少单臂 "if"?

javascript - 有人可以向我解释这个 JavaScript 函数的流程吗? (关闭概念)

c++ - C++ 元编程中的模板柯里化(Currying)