Scheme使用foldr创建对列表而不使用显式递归

RRR*_*RRR 1 scheme fold racket

我正在学习Scheme课程,必须完成以下任务.我必须编写一个函数,它获得两个相同长度的列表A和B,并返回一个列表,其中每个项目都是两个项目的列表 - 一个来自A,第二个来自B.
例如函数得到'(1 2 3 )和'(4 5 6)并返回'((1 4)(2 5)(3 6)).我可以使用这样的地图做到这一点:

(define(func lst1 lst2)(map(lambda(xy)(list xy))lst1 lst2))

但问题是通过foldr并没有明确的递归来做到这一点.

谁能帮帮我吗?我不知道该怎么做....
谢谢!

Ósc*_*pez 5

诀窍是知道要传递什么作为函数参数,这是如何:

(define (func l1 l2)
  (foldr (lambda (e1 e2 acc)
           (cons (list e1 e2) acc))
         '()
         l1 l2))
Run Code Online (Sandbox Code Playgroud)

请注意,我们在末尾传递了两个列表foldr,因此lambda需要三个参数:第一个列表中e1的当前元素(),第二个列表中的当前元素(e2)和acc以值开头的累积输出()'().其余的很简单,只需使用cons和构建输出list.它按预期工作:

(func '(1 2 3) '(4 5 6))
=> '((1 4) (2 5) (3 6))
Run Code Online (Sandbox Code Playgroud)