【发布时间】:2011-11-09 11:16:35
【问题描述】:
我正在尝试在 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 :))。但是,现在无论输入如何,该函数都只输出一个空列表...有人知道那里发生了什么吗??
【问题讨论】:
-
您不需要大于,只需使用 ( ))也是如此。
-
还要注意,这并不是真正的快速快速排序,因为追加速度很慢(列表的第一部分将构建两次......)
-
另请注意,
append和filter已在基础库中可用,分别为(@)(中缀运算符,xs @ yx)和List.filter。
标签: functional-programming ocaml quicksort