2017-11-20 5 views
1
type 'a mylist = 'a listcell ref 
and 'a listcell = Nil | Cons of 'a * ('a mylist) 

let l1 = (ref (Cons (1, ref (Cons (2,ref Nil))))) 
let l2 = (ref (Cons(3, ref (Cons(4, ref Nil))))) 

let rec append l1 l2 = 
match l1 with 
| {contents = Nil} -> (l1 := !l2; l1) 
| {contents = Cons(h,t)} -> append t l2 

diese anfügen, was ich bisher bekommen habe, ist das Ziel l2 anhänge l1 i bis zum Ende des l1 durchqueren kann und den Referee mit l2 ersetzen ... welche ist was ich versucht habe zu tun. aber aus irgendeinem Grund verliere ich alles, was vorher kam.wie zwei veränderbare Listen in ocaml

jede mögliche Hilfe würde geschätzt, dank

Antwort

2

Wenn Sie das Ende der Liste durch rekursive Aufrufe zu erreichen, l1 bezieht sich auf das Nil Element der ersten Liste, nicht den Anfang der ersten Liste.

Sie können dies beheben, indem Sie eine Hilfsfunktion in append verwenden, die wie Ihre aktuelle append-Funktion funktioniert. Aber am Ende gibt es das Original l1 von der äußeren append Funktion zurück.