0
入力int型のリストに番号の桁数を抽出:テキストそれの整数で唯一の1行を含むファイルSML/NJ:
出力:番号の桁数を持つint型のリスト
は、ここに私のコードです:
fun parse file =
let
val input = TextIO.openIn file
fun read_digits (NONE,acc) = rev acc
| read_digits (SOME e,acc) =
let
val c = Option.valOf (e)
val str = Char.toString c
val digit = Option.valOf (Int.fromString str)
in
read_digits (TextIO.input1 input,digit::acc)
end
in
read_digits (TextIO.input1 input,nil: int list)
end
そして、ここで私が得ていたエラーメッセージです:
test.sml:14.11-14.55 Error: operator and operand don't agree [tycon mismatch]
operator domain: char option option * int list
operand: TextIO.elem option * int list
in expression:
read_digits (TextIO.input1 input,digit :: acc)
test.sml:17.5-17.52 Error: operator and operand don't agree [tycon mismatch]
operator domain: char option option * int list
operand: TextIO.elem option * int list
in expression:
read_digits (TextIO.input1 input,nil: int list)
uncaught exception Error
raised at: ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
../compiler/TopLevel/interact/evalloop.sml:44.55
../compiler/TopLevel/interact/evalloop.sml:292.17-292.20
は、任意の提案どのように問題に対処するのですか?
それ以外の人は、数字の数字をテキストファイルからintリストに抽出する方が良いでしょうか?
ありがとうございました! :D また、あなたは正しいです、私は新しい行の文字を確認する必要があります。私がしなかった唯一の理由は、ファイルには1行しか含まれていないことが分かっていたため、 '\ n'文字を読み取るリスクはありませんでした。しかし、残念ながら安全である方が常に良いです。 ありがとう! – Orion
@Orion(1)たとえば 'echo" 12345 "> digits.txt'はそれを挿入します(ただし、' -n'オプションを使用して回避することもできます)。 (2)あなたはファイルをもう必要としなくてもファイル記述子を閉じるべきです –
(1)そうです、エディタでファイルを作成しました。この場合、不要な '\ n'は追加されませんでした。 (2)注目。再度、感謝します! :) – Orion