SML - 合并两个列表

时间:2013-10-12 11:20:02

标签: list sml

我有一个SML问题。我需要编写一个SML函数来合并两个列表并返回一个不同元素的列表。

例如:

- merge [1,2,3,4,5] [4,5,6,7,8];
val it = [1,2,3,4,5,6,7,8] : int list

-merge ["a", "a"] nil;
val it = ["a"] : string list

我只能创建一个合并两个列表的函数,但不能删除不同的元素。

- fun merge list1 list2 = list1@list2;
val merge = fn : 'a list -> 'a list -> 'a list
- merge [1,2,3] [3,4,5];
val it = [1,2,3,3,4,5] : int list

如何编写合并两个列表的函数并删除不同的元素?

由于

2 个答案:

答案 0 :(得分:0)

你需要两个函数---一个删除元素的函数,另一个删除重复元素的函数。 delete函数将接受参数(item,lst),并删除lst中等于item的所有元素。

delete(item,lst) = ...

下一步是剥离重复元素。此函数将您的列表作为参数。除了唯一元素外,您必须递归使用删除函数删除项。

if null hd(lst) then []
else hd(lst)::strip_duplicates(delete(hd(lst),tl(lst)))

答案 1 :(得分:0)

我相信你没有告诉我们你的问题的全部真相。似乎如果您要合并的列表已排序,您可以比较每个列表中的第一个元素,并将最小的元素放在结果列表中。这样,合并列表也将被排序。

这里的技巧是要意识到,当你比较它们时,如果它们相等,你实际上并不需要在结果中包含两者,而如果它们不相等,则需要按正确的顺序包含它们。