2014-11-13 4 views
3

Я должен написать свою собственную функцию карты, используя foldr.Схема/DrRacket - функция карты с foldr

Самое простое решение, которое приходит на ум:

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

Однако, я должен сделать это без использования лямбда (или какой-либо вспомогательной функции), рекурсии, или любой не-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))) 

Я предполагаю, что я должен сделать какое-то эквивалент (лямбда (х) (минусы (Fx) y)), используя приведенные выше функции. Как именно я буду заниматься этим?

ответ

5

Попробуйте

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

Это сработало! Огромное спасибо. – Jose

 Смежные вопросы

  • Нет связанных вопросов^_^