我想在OCaml中实现快速排序算法,我以为我有它,但它不会编译,我只是不能看到它有什么问题。这里是我的代码:在OCaml中实现快速排序:不明白发生了什么问题?
let rec quicksort list =
match list with
[] -> []
|h::t -> append((quicksort (filter (largerthan h)
t))(quicksort(filter (smallerthan h) t)));;
let largerthan x y =
x<y;;
let smallerthan x y =
x>y;;
let rec append x y =
match x with
[] -> y
| h::t -> h:: append t y;;
let rec filter f list =
match list with
[] -> []
|h::t -> (if f h = true then h:: filter f t else filter f t);;
现在,当我尝试OCaml中使用此,它说:“错误:此表达式的类型为‘A - >’B 一个,但预计类型”的表达”同时指出到我的快速排序功能的最后一行。
有谁知道发生了什么事?
非常感谢!
莱纳斯
编辑:好吧,我已经摆脱了原来的错误(感谢ADEPT :))。然而,现在这个函数只是输出一个空列表而不管输入...有人知道那里发生了什么吗?
你不需要为largerthan,只需使用(<)(带有括号)。 smallerthan(使用(>))也是如此。 –
还要注意的是这不会真的是一个快速快速排序,因为追加慢(列表中的第一部分将建立两次... ...) –
还要注意的是'append'和'filter'已经在基础库中的可用,分别为'(@)'(infix operator,'xs @ yx')和'List.filter'。 – gasche