1

我有一个 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

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

谢谢

4

2 回答 2

0

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

delete(item,lst) = ...

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

if null hd(lst) then []
else hd(lst)::strip_duplicates(delete(hd(lst),tl(lst)))
于 2013-10-12T12:50:04.697 回答
0

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

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

于 2013-10-14T10:18:12.383 回答