创建一个函数来配对 2 个列表中的相应元素
Creating a function to pair the corresponding elements in 2 lists
我正在学习使用 scheme 并通过在书中看到的练习题创建函数来练习。这个叫做zipper
。
我已经使用仅 cons
、car
和 cdr
的递归创建了 zipper
函数。
现在我试图再次使用相同的功能,但也使用 map
或 fold
。
该函数接受两个列表并将它们 'zips' 放在一起:
(zip '(1 2 3) '(4 5 6))
==> '((1 4) (2 5) (3 6))
如何使用 map
或 fold
执行此操作?
map 的 Racket 文档提供了以下示例:
> (map (lambda (number1 number2)
(+ number1 number2))
'(1 2 3 4)
'(10 100 1000 10000))
'(11 102 1003 10004)
请注意,这与您要实现的非常相似,但是您可以映射一个 list
函数,而不是在两个列表中的相应元素之间映射 +
函数,如下所示:
> (map (lambda (number1 number2)
(list number1 number2))
'(1 2 3 4)
'(10 100 1000 10000))
'((1 10) (2 100) (3 1000) (4 10000))
因此,zip 函数变为:
(define (zip lst1 lst2)
(map
(lambda(elem1 elem2)
(list elem1 elem2))
lst1 lst2))
如果单独声明map要使用的函数可能会更清楚:
(define (zip1 x y)
(list x y))
(map zip1 '(1 2 3) '(4 5 6)) ; corresponding elements of 2 lists will be sent to zip1
由于 zip1 只是 'list',因此以下内容也有效:
(map list '(1 2 3) '(4 5 6))
两者的输出:
'((1 4) (2 5) (3 6))
所以要做(zip L1 L2)
,不需要写特殊的zip
函数,直接做(map list L1 L2)
.
即可
这也可以用于任意数量的列表,例如(map list L1 L2 L3 L4)
这可能比 custom-made 仅针对 2 个列表的 zip 函数更有优势。
我正在学习使用 scheme 并通过在书中看到的练习题创建函数来练习。这个叫做zipper
。
我已经使用仅 cons
、car
和 cdr
的递归创建了 zipper
函数。
现在我试图再次使用相同的功能,但也使用 map
或 fold
。
该函数接受两个列表并将它们 'zips' 放在一起:
(zip '(1 2 3) '(4 5 6))
==> '((1 4) (2 5) (3 6))
如何使用 map
或 fold
执行此操作?
map 的 Racket 文档提供了以下示例:
> (map (lambda (number1 number2)
(+ number1 number2))
'(1 2 3 4)
'(10 100 1000 10000))
'(11 102 1003 10004)
请注意,这与您要实现的非常相似,但是您可以映射一个 list
函数,而不是在两个列表中的相应元素之间映射 +
函数,如下所示:
> (map (lambda (number1 number2)
(list number1 number2))
'(1 2 3 4)
'(10 100 1000 10000))
'((1 10) (2 100) (3 1000) (4 10000))
因此,zip 函数变为:
(define (zip lst1 lst2)
(map
(lambda(elem1 elem2)
(list elem1 elem2))
lst1 lst2))
如果单独声明map要使用的函数可能会更清楚:
(define (zip1 x y)
(list x y))
(map zip1 '(1 2 3) '(4 5 6)) ; corresponding elements of 2 lists will be sent to zip1
由于 zip1 只是 'list',因此以下内容也有效:
(map list '(1 2 3) '(4 5 6))
两者的输出:
'((1 4) (2 5) (3 6))
所以要做(zip L1 L2)
,不需要写特殊的zip
函数,直接做(map list L1 L2)
.
这也可以用于任意数量的列表,例如(map list L1 L2 L3 L4)
这可能比 custom-made 仅针对 2 个列表的 zip 函数更有优势。