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は、必要な宣言を と の間letに配置i nし、結果の式を と のin間に配置することに注意してくださいend

そのため、式をと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、再帰的にして、その中にリストを作成します。

于 2012-10-21T09:40:34.523 に答える