我的函数是尝试逐行读取文本文件,并在名为somefn的每一行上执行某个预定义函数,并将somefn的值附加到函数中。 somefn已在上面定义并且工作正常。
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
;
我有错误,无法处理它们。 我将不胜感激。
谢谢。
答案 0 :(得分:1)
请注意,在let ... in ... end
块中,您可以在let
和i n
之间放置所需的声明,以及in
和end
之间的结果表达式。
因此,您需要在case
和in
之间放置end
表达式。
您也永远不会打开流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
递归,并在其中构建列表。