我正在尝试在 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 但是当指向我的快速排序函数的最后一行时,预期类型为“a”的表达式。
有人知道出了什么问题吗?
非常感谢!
莱纳斯
编辑:好的,我已经摆脱了原来的错误(感谢 ADEpt :))。然而,现在无论输入如何,该函数都只输出一个空列表...有人知道那里发生了什么吗?
最佳答案
“apply”调用中有额外的括号。而不是:
append((quicksort (filter (largerthan h) t))(quicksort(filter (smallerthan h) t))
写下:
append (quicksort (filter (largerthan h) t)) (quicksort (filter (smallerthan h) t))
关于functional-programming - 在 OCaml 中实现快速排序 : don't understand what's going wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064213/