functional-programming - 在 OCaml 中实现快速排序 : don't understand what's going wrong?

标签 functional-programming ocaml quicksort

我正在尝试在 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/

相关文章:

javascript - 编写一个可以调用任意次数的 curried javascript 函数,它在最后一次函数调用时返回一个值

angularjs - AngularJS是功能性响应式(Reactive)编程吗?

module - 可以注释组合的多态变体类型吗?

algorithm - 我发明了一种新的排序算法吗?或者这和快速排序一样吗

java - 如何消除快速排序实现中的堆栈溢出?

java - 帮助将这个 Java 代码块翻译成 Clojure?

根据球员排名创建公平/势均力敌的球队的算法

ocaml - 使 ocamlbuild 将 .ml 和 .mli 文件都传递给 ocamldoc

functional-programming - `[< >]` 在 OCaml 中是什么意思?

c - 执行快速排序时使用 GCC 编译器在 C 中出现段错误