Я пишу функцию mergesort в F #, но я получаю этот код ошибки, и я не понимаю, почему.F # Ошибка и Mergesort
«ошибка FS0030:. Ограничение Значение Значение„оно“было выведено иметь общий тип Вэл ей: список _a когда '_a: сравнение Либо определить„это“как простой термин данных, сделать его функция с явными аргументами или, если вы не собираетесь использовать ее в качестве общего, добавьте аннотацию типа. "
Я получаю код ошибки при попытке вызова, например, mergesort [1; 2; 3; 3; 2; 6] ;;
Вот фрагмент кода
let rec merge l =
match l with
| ([], ys) -> ys
| (xs, []) -> xs
| (x::xs, y::ys) -> if x < y then x :: merge (xs, y::ys)
else y :: merge (x::xs, ys)
let rec split l =
match l with
| [] -> ([], [])
| [a] -> ([a], [])
| a::b::cs -> let (M,N) = split cs
(a::M, b::N)
let rec mergesort l =
match l with
| [] -> []
| L -> let (M, N) = split L
merge (mergesort M, mergesort N)
Для меня код компилируется нормально, хотя в 'mergesort' возникает некоторая ошибка, вызывающая stackoverflow. Исправив это, кажется, исправить проблему FSI. FSI иногда сообщает о неправильной ошибке, похоже, что это один из таких случаев. – FuleSnabel