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
答案 0 :(得分:1)
在您提供的代码中,insert
在您使用时未定义。
如果我先将insert
的定义放在首位,它对我来说就可以了。就我所知,这似乎是一个很好的代码(尽管不是特别快的一种)。
我会尝试再次从头开始你的OCaml。你可能有一些令人困惑的旧定义。
答案 1 :(得分:0)
我自己想出来了。我应该制作函数的顺序,以便insert
在sort
之前出现:)
(* 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
函数然而。因此,更改函数定义的顺序可以解决问题。