2013-10-12 55 views
0

我有一个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 = [email protected]; 
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

函数接收的列表是否保证被排序? – waldrumpus

回答

0

你需要两个功能---即删除元素的功能,并删除重复的元素其他功能。删除函数将采用参数(item,lst),并删除lst中与item相等的所有元素。

delete(item,lst) = ... 

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

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

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

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