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

Вам понадобятся две функции --- функцию, которая удаляет элементы, а также другую функцию, которая удаляет повторяющиеся элементы. Функция delete принимает аргумент (item, lst) и удаляет все элементы из lst, которые равны элементу.

Следующим шагом будет удаление дублирующих элементов. Эта функция принимает ваш список в качестве аргумента. Вам придется использовать функцию удаления, чтобы удалить элементы рекурсивно, за исключением уникального элемента.

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

Я считаю, что вы не сказали нам всю правду о своей проблеме. Кажется, что если списки, которые вы хотите объединить, сортируются, вы можете сравнить первый элемент в каждом списке и поместить наименьший из списка. Таким образом, объединенный список также будет отсортирован.

Хитрость здесь заключается в том, чтобы понять, что, сравнивая их, если они равны, на самом деле вам не нужно включать оба результата, а если они не равны, вы должны включить их в правильном порядке ,

Смежные вопросы