2012-10-21 73 views
0

我的函數試圖逐行讀取文本文件,並在每行上調用somefn執行某個預定義的函數,並將somefn的值附加到函數中。 somefn已經在上面定義並且工作正常。瞭解文本IO

fun extractline(infile:string)= 
    let 
    val insl=TextIO.inputLine(ins) 
    case insl of 
    NONE=> [] 
    |SOME(l)=>somefn(insl)::extractline(infile) 
    in 
    TextIO.closeIn(ins); 
    end 
; 

我有錯誤,無法處理它們。 我將不勝感激。

謝謝。

+1

你得到的錯誤是什麼? –

回答

1

請記住,在let ... in ... end塊,你把你需要leti n,並inend之間的最終表達的聲明。

因此,您需要將您的case表達式置於inend之間。

你也永遠不會打開流,ins。讓你的函數打開這個流,然後在另一個函數中對這個流進行遞歸的工作,但是;您不想爲每個遞歸調用打開文件。

你想要的東西,這種形式:

fun extractline file = 
    let 
     val ins = TextIO.openIn file 

     fun extractline_h() = (* do something with ins here *) 
    in 
     extractline_h() before 
     TextIO.closeIn ins 
    end 

然後你讓extractline_h是遞歸的,並建立在該列表中。