我正在学习Scheme课程并且必须完成以下任务。我必须编写一个函数,它获得两个相同长度的列表A和B,并返回一个列表,其中每个项目都是两个项目的列表 - 一个来自A,另一个来自B。 例如,函数得到'(1 2 3)和'(4 5 6)并返回'((1 4)(2 5)(3 6))。 我可以使用这样的地图来做到这一点:
(define(func lst1 lst2)(map(lambda(x y)(list x y))lst1 lst2))
但问题是通过foldr和没有显式递归来做到这一点。
任何人都可以帮助我吗?我不知道怎么做.... 谢谢!
答案 0 :(得分:5)
诀窍是知道要传递什么作为函数参数,这里是如何:
(define (func l1 l2)
(foldr (lambda (e1 e2 acc)
(cons (list e1 e2) acc))
'()
l1 l2))
请注意,我们在foldr
末尾传递两个列表,因此lambda
需要三个参数:当前第一个列表中的元素(e1
),第二个列表中的当前元素(e2
)和累积输出(acc
),以值'()
开头。其余的很简单,只需使用cons
和list
构建输出。它按预期工作:
(func '(1 2 3) '(4 5 6))
=> '((1 4) (2 5) (3 6))