Я хотел бы написать одну функцию, которая извлекает только нечетные числа из списка. Что-то вроде:
fun odd(nil) = nil | odd(a::nil) = a | odd(a::(b::c)) = a::odd(c);
Но это вызывает эту ошибку:
оператор и операнд не согласны [цикличность]
Во втором случае odd(a::nil) = a вы возвращаете a, который является единственным элементом. В двух других случаях вы возвращаете список. Если вы измените его на odd(a::nil) = [a], поэтому все случаи возвращают список, он работает.
odd(a::nil) = a
a
odd(a::nil) = [a]