Ich habe diese Mergesort-Implementierung geschrieben, die funktioniert, wenn ich die Divide-Funktion außerhalb der Mergesort-Funktion setzen. Aber wenn ich versuche, eine innere Funktion von mergesort zu teilen, stoße ich auf einen Syntaxfehler.OCaml: und Schlüsselwort Syntaxfehler
Ich weiß, es muss eine wirklich einfache Erklärung dafür geben. Ich habe überall im Internet nachgeschaut, aber nichts gefunden. Hier
ist der Code:
let mergesort list =
let rec sort lists acc = (
let rec merge sublist1 sublist2 merged_list =
match sublist1 with
|[] -> merged_list @ sublist2
|hd1 :: tl1 ->
match sublist2 with
|[] -> merged_list @ sublist1
|hd2 :: tl2 ->
if hd1 < hd2 then merge tl1 sublist2 (merged_list @ hd1::[])
else merge sublist1 tl2 (merged_list @ hd2::[])
in match lists with
|[] ->
(match acc with
|[] -> []
|hd :: [] -> hd
|_ -> sort acc [])
|hd :: tl -> sort (List.tl tl) ((merge (List.hd tl) hd [])::acc)
)
and rec divide list list_of_lists = (
match list with
[] -> list_of_lists
|hd :: tl -> divide tl ((hd :: []) :: list_of_lists)
)
in sort (divide list []) []
;;
und es ergibt sich in:
Characters 567-570:
and rec divide list list_of_lists = (
^^^
Error: Syntax error
Haben Sie versucht, das Schlüsselwort 'rec' zu entfernen, das Ihnen der Fehler sagt? 'und' wird die vorherige Definition wiederholen, die in diesem Fall 'let rec' ist, also schreiben Sie effektiv' let rec rec' –