Пустой список ([]
) совершенно особенный;это может быть список любого типа.Поэтому компилятор жалуется, что у вас нет определенного типа для []
.Добавление аннотации типа к аргументу помогает решить проблему:
let results = removeEven ([]: int list)
или более аннотация идиоматического типа в соответствии с предложением @kvb:
let results: int list = removeEven []
Возможно, этовне всякого сомнения, но ваша функция должна называться removeOdd
, поскольку индексы часто начинаются с 0
, а ваша функция удаляет все элементы с нечетными индексами.Более того, все становится намного понятнее, если вы используете сопоставление с образцом в первых двух элементах списка, а не держите счетчик x
для проверки индексов:
let rec removeOdd = function
| [] -> []
| [x] -> [x]
| x::_::xs -> x::removeOdd xs