【发布时间】:2014-11-26 19:13:54
【问题描述】:
对于一个作业,我需要编写一些 Haskell 代码,该代码输入一个有限列表,该列表由无限的整数列表组成,每个列表单调递增。
现在,我需要将它们合并到一个对整数进行排序的列表中。此外,一些整数可能出现在多个列表中:在输出列表中,每个整数可能只出现一次。
所以如果输入例如 [ [1, 2, 6, 10, 28, 40, ...] [3, 4, 10, 28, 100, ...] , [任意数量的列表] ] 那么输出应该是 [1, 2, 3, 4, 6, 10, 28, 40, 100, ...]
我有点卡在这里。我不知道如何有效地使用foldr 来合并列表。我认为我应该比较每个列表的头部,然后从中创建一个新列表。
【问题讨论】:
-
对无限列表进行排序通常不是很容易。如果我有输入
[[1, 3, 4, 5, 6, ...], [1, 3, 5, 7, ..]],然后我开始对它们进行排序以得到[1, 3, 4, 5, 6, 7, ...],我怎么知道这两个输入列表中的某处没有出现 2? -
这是不可能的,除非您知道列表是单调递增的,我猜这在作业中有所说明。您能否确认并向我们展示您的尝试?如果您不只是说“告诉我如何”,那么这里的人通常会更有帮助。
-
你不需要排序这些列表,你需要合并它们。它们必须已经排序。您不能对无限列表进行排序。
-
我确实说错了。列表单调递增。所以确实需要合并。
-
您是否考虑过如何合并两个列表?
标签: list haskell functional-programming