2

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

4

2 に答える 2

1

ここで提供するコードでは、insert使用時に定義されていません。

の定義をinsert最初に置くと、うまく機能します。私が知る限り、これは良いコードのように思えます (ただし、特に高速なソートではありません)。

OCaml をゼロから再起動してみます。おそらく、物事を混乱させる古い定義がいくつかあるでしょう。

于 2013-11-15T00:14:27.393 に答える
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];;

関数は関数と OCaml にsort依存しています。関数を呼び出しても意味がありません。関数がまだわからないからです。そのため、関数定義の順序を変更すると問題が解決します。insertsortinsert

于 2013-11-15T00:14:54.890 に答える