Мне трудно понять функциональность foldr. Я делаю домашнюю работу, и мы должны построить функцию (не нужна папка), которая сжимает элементы двух списков (например, '(1 2 3) (4 5 6) -> (1 4) (2 5) (3 6).
До сих пор это работало довольно хорошо:
(define (zip list1 list2)
(cond
[(or (empty? list1) (empty? list2)) '()]
[else (cons (list (car list1) (car list2)) (zip (cdr list1) (cdr list2)))]))
Но теперь мне нужно создать функцию, которая использует функцию zip, которую я сделал ранее, и объединяет два списка с функцией f и возвращает их в виде списка. (например, (zipfunction + '( 1 2) '(3 4) -> (4 6)
У меня есть основная идея foldr, он будет рекурсивно применять функцию, которую я предоставляю к списку справа налево, но я не могу понять, как это сделать с несколькими списками и несколькими функциями, и нужна ли мне переменная-аккумулятор или нет.
Может ли кто-нибудь помочь мне с этим?
Заранее спасибо!
(define (zipadd f list1 list2) (map (lambda ..... ....f..... ) (zip list1 list2)))
, чтобы фактически использовать вашу функциюzip
. - person Will Ness   schedule 30.06.2017