У меня нет хорошего названия для функции. Я вставляю свою реализацию ниже (я назвал это map-traversing
; другие должны предложить лучшее имя). Я сделал зеркало порядка аргументов самого map
.
(define (map-traversing func data)
(if (list? func)
(map map-traversing func data)
(func data)))
Используя ваши образцы данных, мы имеем:
(map-traversing `((,car ,cdr) ,cadr) '(((aa . ab) (bb . bc)) (cc cd . ce)))
Для второго примера требуется SRFI 26. (Позволяет писать (cut * 2 <>)
вместо (lambda (x) (* 2 x))
.)
(map-traversing `(,(cut * 2 <>) (,(cut * 3 <>) ,(cut * 5 <>))) '(100 (10 1)))
Самое главное, что все ваши функции должны быть в кавычках, в отличие от вашего примера.