List 转换列表haskell

List 转换列表haskell,list,haskell,integer,List,Haskell,Integer,我有这个列表([Integer],[Integer]) 我想把它转换成[(整数,整数)] 根据我所读到的,我应该使用像map这样的高阶函数 alterList :: ([Integer],[Integer]) -> [(Integer,Integer)] alterList a = map(\a -> .....?) 有什么指导方针吗?两个列表的大小相同 就像我有两个列表([1,2,3,4],[5,6,7,9]),我想把它们转换成[(1,5),(2,6),(3,7),(4,8)]所

我有这个列表([Integer],[Integer]) 我想把它转换成[(整数,整数)]

根据我所读到的,我应该使用像map这样的高阶函数

alterList :: ([Integer],[Integer]) -> [(Integer,Integer)]
alterList a = map(\a -> .....?)
有什么指导方针吗?两个列表的大小相同


就像我有两个列表([1,2,3,4],[5,6,7,9]),我想把它们转换成[(1,5),(2,6),(3,7),(4,8)]

所以在你更正你的帖子之后,我想你需要

alterList :: ([Integer],[Integer]) -> [(Integer,Integer)]
alterList (l1, l2) = zip l1 l2
例如:

>>> alterList ([1,2,3,4],[5,6,7,9])
[(1,5),(2,6),(3,7),(4,9)]
这相当于

alterList' :: ([Integer],[Integer]) -> [(Integer,Integer)]
alterList' = uncurry zip

请注意,即使两个列表的大小不一样,此函数也可以工作:在这种情况下,它的作用就像最长列表被截断为最短列表的长度一样。

因此,在更正帖子后,我想您需要

alterList :: ([Integer],[Integer]) -> [(Integer,Integer)]
alterList (l1, l2) = zip l1 l2
例如:

>>> alterList ([1,2,3,4],[5,6,7,9])
[(1,5),(2,6),(3,7),(4,9)]
这相当于

alterList' :: ([Integer],[Integer]) -> [(Integer,Integer)]
alterList' = uncurry zip

请注意,即使两个列表的大小不相同,此函数也可以工作:在这种情况下,它的作用就像最长列表被截断为最短列表的长度一样。

不完全清楚如何将
[([Integer],[Integer])]
映射到
[(Integer,Integer)]
。2元组可以包含两个大小不同的列表。。。因此,连接不是一种简单的转换。有很多方法可以实现具有这种类型签名的函数。您必须提供一些示例输入以及每个示例的预期输出。(这不像,例如,
fmap::(a->b)->[a]->[b]
只有一个可能的实现遵守函子定律。)也许您正在寻找
alterList=fmap(bimap f)
,其中
f
[Integer]>Integer
类型的函数
bimap
(来自
Data.Bifunctor
)将
f
应用于元组中的每个列表,
fmap
bimap f
应用于输出列表中的每个元组。假设您想要
[(1,3),(2,4),(4,6),(4,7),(5,8)]
当输入为
[([1,2],[3,4,5],[6,7,8])
那么您要查找的函数是
alterList=concatMap(\(l1,l2)->zip l1 l2)
。但是,正如上面的评论所说,我们无法猜测您想要什么。我有两个类似于[([1,2,3,4],[5,6,7,8])的列表,并且想要它类似于[(1,5)(2,6)(3,7)(4,8)]您将如何将
[([Integer],[Integer])
映射到
[(Integer,Integer)]
。2元组可以包含两个大小不同的列表。。。因此,连接不是一种简单的转换。有很多方法可以实现具有这种类型签名的函数。您必须提供一些示例输入以及每个示例的预期输出。(这不像,例如,
fmap::(a->b)->[a]->[b]
只有一个可能的实现遵守函子定律。)也许您正在寻找
alterList=fmap(bimap f)
,其中
f
[Integer]>Integer
类型的函数
bimap
(来自
Data.Bifunctor
)将
f
应用于元组中的每个列表,
fmap
bimap f
应用于输出列表中的每个元组。假设您想要
[(1,3),(2,4),(4,6),(4,7),(5,8)]
当输入为
[([1,2],[3,4,5],[6,7,8])
那么您要查找的函数是
alterList=concatMap(\(l1,l2)->zip l1 l2)
。但是,正如上面的评论所说,我们无法猜测你想要什么。我有两个类似于[([1,2,3,4],[5,6,7,8])的列表,并且想要它类似于[(1,5)(2,6)(3,7)(4,8)]