Scheme/DrRacket - функция сопоставления с foldr

Мне нужно написать свою собственную функцию карты, используя foldr.

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

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

Однако я должен сделать это без использования лямбда (или любой вспомогательной функции), рекурсии или любой функции абстрактного списка, отличной от папки.

У меня также есть следующие вопросы (которые я не могу изменить):

(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)))

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


person Jose    schedule 13.11.2014    source источник


Ответы (1)


Пытаться

(define (my-map f lst)    
  (foldr (uncurry (compose (curry cons) f))
         empty lst))
person uselpa    schedule 13.11.2014