2017-07-11 14 views
0

このコードを実行しますが、このエラーがあります。 OCamlに相互再帰がありますか?相互再帰の使用

Error: Unbound value quicksort Did you mean tquicksort?

私の問題:

let rec tquicksort lm l lM = 
    match l with 
     | [] -> unirL(unir (rev lm) lM) 
     | lx::lxs -> let (la, lb) = part lx lxs in 
        if nroelem la < nroelem lb then 
         tquicksort (quicksort (la::lm)) lb lM 
        else 
         tquicksort lm la (quicksort (lb::lM));; 
let quicksort l = tquicksort [] l [];; 
+0

あなたはプロトタイプを何を求めていますか? – RichouHunter

+1

また、「仕事をしない」とはどういう意味ですか? –

+0

申し訳ありませんが、私はよく英語で書いていません。私がそれを実行すると、エラー: "エラー:アンバウンド値クイックソート tquicksortを意味しましたか?" –

答えて

5

あなたは相互再帰を許可するように前方宣言のために求めています。 OCamlでこの作業を行う方法はlet rec ... and ...です。例えば

let rec g x = if x < 2 then x else f x 
and f x = g (x - 1) 
+0

私は次のように書きました: レック・テイクスティック・リムス・リミテッド= ....... とクイックソートl = tquicksort [] l [] ;; "この式には 'リストがありますが、式にはリスト型の式が必要です'というエラーが表示されました。型変数 'aはリスト内で発生します' –

+0

My OCamlは4.01です。 –