如何使用map函数将元组列表拆分为haskell中的两个列表?

bar*_*ron 3 haskell unzip map

这是昨天到期的作业,但我不希望答案只是指向正确的方向请;)

我正在尝试unzip使用map和lambda与haskell 实现函数.

:t unzip
[(a,b)] -> ([a],[b]) 
Run Code Online (Sandbox Code Playgroud)

所以我认为lambda看起来像是\(a,b)->([a],[b])那种作品,除了我从我的输入中得到的[(4,5),(7,5),(9,7)] => [([4],[5]),([7],[5]),([9],[7])]但我本来希望看到的[4,7,9],[5,5,7].那么我在这里做错了什么?

提前感谢我指出了正确的方向

Dan*_*ner 6

那么,map :: (a -> b) -> ([a] -> [b])返回一个清单吧?而且你希望你的函数返回两个列表,所以......你需要使用map两次.这是你填写的骨架:

unzip xs = (map {- ??? -} xs, map {- ??? -} xs)
Run Code Online (Sandbox Code Playgroud)

不幸的是,坚持使用map是低效的,因为这意味着你必须在列表上进行两次传递.你可以做得更好,但这很棘手!试一试,然后通过将其与GHC的实施进行比较来了解您的表现.