我有一个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
如何编写合并两个列表的函数并删除不同的元素?
由于
答案 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)
我相信你没有告诉我们你的问题的全部真相。似乎如果您要合并的列表已排序,您可以比较每个列表中的第一个元素,并将最小的元素放在结果列表中。这样,合并列表也将被排序。
这里的技巧是要意识到,当你比较它们时,如果它们相等,你实际上并不需要在结果中包含两者,而如果它们不相等,则需要按正确的顺序包含它们。