2013-10-12 204 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

我相信你沒有告訴我們關於你的問題的全部真相。看起來,如果您想要合併的列表已排序,則可以比較每個列表中的第一個元素,並將最小的元素放入結果列表中。這樣合併的列表也將被排序。

這裏的訣竅是要認識到,當你比較它們時,如果它們相同,你實際上不需要在結果中包含兩者,而如果它們不相等,則需要按照正確的順序包含它們。