OCaml中的排序功能不起作用

时间:2013-11-15 00:07:40

标签: sorting functional-programming ocaml

OCaml的新手,我正在学习。我写了下面的函数。你会说这个功能没问题吗?我得到一个错误,但算法是否有意义?我该如何纠正呢。

let rec sort l =
    match l with 
    [] -> []
    |h::t -> insert h (sort t)
;;

let rec insert x l =
    match l with
    [] -> [x]
    |h::t ->
        if x <= h
            then x :: h :: t
    else h :: insert x t
;;


sort [3; 2; 8; 4; 1];;

我进入我的终端: Error: Unbound value sort

2 个答案:

答案 0 :(得分:1)

在您提供的代码中,insert在您使用时未定义。

如果我先将insert的定义放在首位,它对我来说就可以了。就我所知,这似乎是一个很好的代码(尽管不是特别快的一种)。

我会尝试再次从头开始你的OCaml。你可能有一些令人困惑的旧定义。

答案 1 :(得分:0)

我自己想出来了。我应该制作函数的顺序,以便insertsort之前出现:)

(* Sort a list *)

let rec insert x l =
    match l with
    [] -> [x]
    |h::t ->
        if x <= h
            then x :: h :: t
    else h :: insert x t
;;

let rec sort l =
    match l with 
    [] -> []
    |h::t -> insert h (sort t)
;;




sort [3; 2; 8; 4; 1];;

sort函数依赖于insert函数和OCaml,调用sort函数没有意义,因为它不知道insert函数然而。因此,更改函数定义的顺序可以解决问题。