2016-04-08 5 views
1

Ich habe eine input.txt Datei mit ein paar Zeilen Text. Ich versuche, diese Zeilen in einer Liste zu speichern. Ich denke, ich mache es richtig, aber list l wird nicht aktualisiert. bitte hilfe.Datei zeilenweise lesen und in einer Liste speichern

let l = [] 
let() = 
    let ic = open_in "input.txt" 
    in 
    try 
    while true do 
     let line = input_line ic 
     in 
     let rec append(a, b) = match a with 
     |[] -> [b] 
     |c::cs -> c::append(cs,b) 
     in 
     append(l, line) 
     (* print_endline line *) 
    done 
    with End_of_file -> 
close_in ic;; 

Abgesehen von Warnung 10, bekomme ich keinen Fehler.

+0

http://ocaml.org/learn/tutorials/basics.html – Thomash

+0

@Thomas Gib mir wenigstens einen Hinweis. Ich habe ihm mehr als 30 Minuten gewidmet. –

+1

'append (l, line)' ändert NICHT die ursprüngliche Liste 'l' sondern erstellt eine neue Liste aus' l' und 'line'. "l" ist unverändert. Ihr Code verwirft die neue Liste, daher passiert nichts. – camlspotter

Antwort

2
let l = [] 

Variablen in OCaml sind unveränderlich, also egal, welchen Code Sie nach dieser Zeile schreiben, wird l immer [] gleich sein.

+0

aber das ändert sich l: laß l = [["hi"; "da"]] ;; Lassen Sie Anhängen (a, b) = passen Sie ein mit | [] -> [b] | c :: cs -> c :: anfügen (cs, b) in append (l, ["Hallo" ; "Welt"]);; –

+0

Ich verstehe nicht, warum in einem Fall Liste aktualisiert wird, aber in anderen ist es nicht. –

+1

Nein, der Code in Ihrem Kommentar ändert sich NICHT "l". 'append' erstellt eine neue Liste von' l', aber 'l' ist unverändert. Versuchen Sie 'l ;;' um zu sehen, dass es den ursprünglichen Wert behält. – camlspotter

0

Es sieht so aus, als ob Sie in zwingender Programmierung gefangen sind - eine gute Sache, mit OCaml zu beginnen!

Typische funktionelle und rekursive Programmierung würde eine Datei wie folgt lesen:

eine Zeile lesen, dann, um es „eine Zeile gelesen“ anhängen. Am Ende der Datei beenden Sie die Liste mit [].

Verwandte Themen