2016-04-08 20 views
1

Birkaç satırlık metin içeren bir input.txt dosyası var. Bu satırları bir l listesinde saklamaya çalışıyorum. Sanırım doğru yapıyorum ama l listesi güncellenmiyor. lütfen yardım et.Dosya satırını oku ve bir listede sakla

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;; 

Uyarı 10'dan ayrı olarak, herhangi bir hata alamıyorum. OCaml içinde

+0

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

+0

@Thomas En azından bana bir ipucu ver. Ona 30 dakikadan fazla sadık kaldım. –

+1

'addend (l, line)' 'l' orijinal listesini değiştirmez, ancak' l' ve 'line''den yeni bir liste oluşturur. Ben değişmedi. Kodunuz yeni listeyi atar, bu nedenle hiçbir şey olmaz. – camlspotter

cevap

2
let l = [] 

Değişkenler değişmez, bu nedenle olursa olsun bu satırdan sonra yazdıklarıma kodu, l hep [] eşit olacaktır.

+0

ama bu değişiyor l: let l = [["hi"; "there"]] ;; rec recend (a, b) = ile eşleştirin | [] -> [b] | c :: cs -> c :: eki (cs, b) eki (l, ["merhaba") "dünya"]) ;; –

+0

Bir vaka listesinin neden güncellendiğini anlamıyorum, ancak diğerlerinde değil. –

+1

Yorumunuzdaki kod, 'l' DEĞİŞTİRMEZ. 'append', 'l''den yeni bir liste oluşturur ancak' l 'değişmez. Orijinal değeri koruduğunu görmek için 'l; – camlspotter

0

Zorunlu programlamada yakalanmış gibi görünüyor - OCaml ile başlamak için iyi bir şey!

Tipik fonksiyonel ve özyinelemeli programlama buna benzer bir dosya okurdum:

bir çizgi okuyun, sonra ona "bir çizgi okumak" ekleyin. End_of_File'da listeyi [] ile bitirdiniz.