Wenn ich den folgenden Code ausführen, erhalte ich einen Syntaxfehler, obwohl, soweit ich feststellen kann, die Syntax korrekt ist. Dies versucht eine Warteschlangenstruktur zu implementieren, bei der die Funktion from_list
eine Liste in eine Warteschlange mit den entsprechenden Werten konvertiert. Ich schrieb str_of_int_q
, um den Inhalt einer Warteschlange zu drucken. x
und y
sollen zwei Knoten sein, mit x
am Kopf und y
am Ende.Ändern eines veränderbaren Felds in OCaml
;; open Assert
type 'a qnode = {v: 'a;
mutable next: 'a qnode option}
type 'a queue = {mutable head: 'a qnode option;
mutable tail: 'a qnode option}
let from_list (l: 'a list) : 'a queue =
let rec loop (l2: 'a list) (qu: 'a queue) =
begin match l2 with
| [] -> qu
| [x] -> let y = {v = x; next = None} in
qu.head <- Some y; qu.tail <- Some y;
qu
| h1::h2::t -> let y = qu.head in
let z = {v = h1; next = y} in
qu.head <- Some z;
qu
end
in loop l {head = None; tail = None}
let str_of_int_q (q: int queue) : string =
let rec loop (r: int qnode option) (s: string) : string =
begin match r with
| None -> s
| Some n -> loop n.next (s^(string_of_int n.v))
end
in loop q.head ""
let x = {v = 1; next = None}
let y = {v = 2; next = None}
x.next <- Some y;
let z = {head = Some x; tail = Some y}
;; print_endline (str_of_int_q z)
Mein Fehler:
line 32, characters 7-9:
Error: Syntax error
32 Linie ist die Linie x.next <- Some y;
und Zeichen 7-9 der <-
anzuzeigen. Aber ich speichere ein Objekt des passenden Typs in ein veränderbares Feld, damit ich nicht sehe, was falsch läuft.
Funktioniert es, wenn Sie '' '' vor 'x.next' setzen? – melpomene
@melpomene Huh, es tat, als ich '' '' vor 'x.next' legte und dann' '' vom Ende nahm. Ich verstehe nicht genau, warum das funktioniert, aber es ist großartig zu sehen, dass es funktioniert. Setzen Sie das als Antwort und ich werde es akzeptieren. – Addem