Я должен написать функцию, которая берет список и разбивает его на 2 списка. Первый список будет содержать элементы в нечетном положении, а 2-й список - в четном положении. Вот моя попытка, которая дает мне следующее предупреждение:Разделить список на 2 списка нечетных и четных позиций - SML?
Внимание: тип VARS не обобщен из ограничения значения инстанцируются для фиктивных типов (X1, X2, ...)
Как улучшить это?
fun splt (lst: int list) =
let
fun splt2 (lst: int list, count: int, lst1: int list, lst2: int list) =
if null lst
then []
else if (count mod 2 = 0)
then splt2 (tl lst, count+1, hd lst::lst1, lst2)
else splt2 (tl lst, count+1, lst1, hd lst::lst2)
in
splt2 (lst,1,[],[])
end
Вот 2-я правильная реализация, которую я нашел, но меня в основном интересует фиксация 1-го! I want to split a list into a tupple of odd and even elements
fun split [] = ([], [])
| split [x] = ([x], [])
| split (x1::x2::xs) =
let
val (ys, zs) = split xs
in
((x1::ys), (x2::zs))
end;
UPDATE: Улучшение просто заменить
if null lst then
[]
с этим:
if null lst then
[lst1]@[lst2]
Я видел ваши вопросы по поводу последние пару дней. SO не предназначен, чтобы научить вас всему для вашего класса. Вам придется приложить больше усилий. – naomik
@naomik, но я люблю SO. Я узнаю здесь больше, чем в своем классе. Пожалуйста, поделитесь своими знаниями. Я уверен, что многие из них выиграют от этих небольших проблем. –