2017-04-22 70 views
0

我很新的SML和我想要一些項目添加到列表中添加項目列出SML

fun foo(inFile : string, outFile : string) = let 
val file = TextIO.openIn inFile 
val outStream = TextIO.openOut outFile 
val contents = TextIO.inputAll file 
val lines = String.tokens (fn c => c = #"\n") contents 
val lines' = List.map splitFirstSpace lines 
fun helper1(lis : string list) = 
    case lis of 
      [] => (TextIO.closeIn file; TextIO.closeOut outStream) 
     | c::lis => (TextIO.output(outStream, c); 
    helper1(lis)) 
fun helper(lis : (string * string) list, stack : string list) = 
    case lis of 
      [] => stack 
     | c::lis => (act(#1 c, #2 c)::stack; 
    helper(lis, stack)) 
val x = helper(lines', []) 
in 
helper1(x) 
end; 

我得到一個空的輸出文件,每當我跑的代碼和我」有問題搞清楚爲什麼,但我知道,輔助功能從「行爲」的功能得到適當的值,因爲我用的打印(動作(...))

感謝

回答

2

的測試它米問題出在這個部分:

(act(#1 c, #2 c)::stack; helper(lis, stack)) 

這是創建一個新列表,然後在執行遞歸調用之前立即拋出它。什麼你想要做的卻是

helper(lis, act(#1 c, #2 c)::stack) 

額外提示:你的兩個輔助功能可以通過List.appList.foldl簡單的用途進行更換。

編輯:進一步提示:事實上,你可以寫一個剛剛

helper(lis, act(c)::stack) 

因爲「兩個參數」的函數是簡單地把一對函數。