【问题标题】:How can i merge two lists using the technique below如何使用以下技术合并两个列表
【发布时间】:2020-02-14 17:39:57
【问题描述】:

我需要获取两个列表并将它们组合成对每个列表的第一个元素,然后是第二个,依此类推......

输入:[1,2,3] [4,5,6] 输出:[(1,4),(2,5),(3,6)]

【问题讨论】:

  • 你的方法有什么问题?
  • 我是haskell的新手,根本不知道如何解决这个问题,我尝试将这两个列表合并为一个,使用第一个列表中的第一个元素,然后使用第二个列表中的第二个元素.我得到 [1,4,2,5,3,6],但不知道如何从中配对。
  • 你可以尝试用显式递归来实现这个。
  • 如果您能详细说明一下,因为我目前对这个主题一无所知,给我写一个程序将不胜感激。

标签: list haskell merge


【解决方案1】:

这称为“压缩”。您可以使用zip :: [a] -> [b] -> [(a, b)]。确实,例如:

Prelude> zip [1,2,3] [4,5,6]
[(1,4),(2,5),(3,6)]

您可以通过显式递归实现自己的zip。如果两个列表之一(或两者)为空,则结果为空列表。如果两个列表都是非空的,那么你应该产生一个列表的两个头的 2 元组,并在两个尾上递归。

所以程序看起来像:

zip' :: [a] -> [b] -> [(a, b)]
zip' [] _ = …
zip' _ [] = …
zip' (x:xs) (y:ys) = …

需要填写的部分。

【讨论】:

  • 在我的大学里,我们使用 notepad++ 编写程序,然后在 ghci 中执行它们,但我们首先编写的是: main :: IO(), main = do, i
  • 然后我们在此之前编写实际脚本
  • @Tyler'sruler:你可以在ghci 中加载文件,并使用提示符,所以使用zip' [1,2,3] [4,5,6] 进行测试。
  • 我需要这样做,以便当我在 ghci 中调用 main 然后键入任意两个列表来制作第三个列表
  • @Tyler'sruler:this答案中的练习与他们给出的不同,因此您需要填写...s。
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多