Я реализовал функцию (объединить Fn l1 l2), которая объединяет два списка попарно с е и возвращает список:Ракетки: Как объединить два списка попарно с й
(check-expect (combine string-append "" '("1" "2" "3") '("4" "5" "6")) '("14" "25" "36"))
(check-expect (combine + 0 '(1 2 3) '(4 5 6)) '(5 7 9))
(define (combine f n l1 l2)
(if (empty? l1) '()
(cons (foldr f n (first (zip l1 l2)))
(combine f n (rest l1) (rest l2)))))
Он использует (почтовый l1 l2) функция я реализовывал ранее:
(check-expect (zip '(1 2 3 0) '(4 5 6))'((1 4) (2 5) (3 6)))
(define (zip l1 l2)
(local
[(define (take lst n)
(if (zero? n)
'()
(cons (first lst)
(take (rest lst)(- n 1)))))
(define min-lsts
(min (length l1) (length l2)))]
(foldr (lambda (e1 e2 acc) (cons (list e1 e2) acc)) '() (take l1 min-lsts) (take l2 min-lsts))))
(скомбинировать Fn l1 l2) работает, как ожидалось, но есть способ, чтобы изменить его (объединить ф l1 l2), что не ожидает, п, но до сих пор использует foldr?
Заранее благодарен!