0

我的函数试图逐行读取一个文本文件,并在每一行上执行一个名为 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
;

我有错误,无法处理。我会很感激一些帮助。

谢谢你。

4

1 回答 1

1

请记住,在let ... in ... end块中,您将需要的声明放在 and 之间leti n并将结果表达式放在inand之间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递归,并在其中建立列表。

于 2012-10-21T09:40:34.523 回答