В настоящее время я задаюсь вопросом о подходе к разделению списка в подсписках в соответствии с заданными критериями.Из-за дидактической цели этой работы я не использую встроенные функции.IE, следующая программа должна, при наличии списка, вернуть список списков, где каждый подсписок не имеет дубликатов и находится в порядке возрастания:
increment [4;4;10;20;5;30;6;10] = [[4;10;20];[5;30];[6;10]]
increment [5;6;4;3;2;1] = [[5;6];[4];[3];[2];[1]]
Моя лучшая попытка на данный момент основана на этомкусок кода, который я произвел:
let rec increment li [lo] =
match li with
|[] -> [lo]
|[x] -> [x]::[lo]
|x::y::xs -> if x = y then
increment (y::xs) [lo]
elif x < y then
x::(increment (y::xs) [lo])
else
(x::(increment xs [lo]))::[lo]
К сожалению, мне не удается создать список списков.Принцип верен.Он основан на функции, которую я построил, которая правильно изолирует возрастающий список, если он присутствует:
let rec incrementAux li =
match li with
|[] -> []
|[x] -> [x]
|x::y::xs -> if x = y then
incrementAux (y::xs)
elif x < y then
x::(incrementAux (y::xs))
else
x::(incrementAux [])
Любое предложение будет высоко оценено!