0
輸入:只包含1與它SML/NJ:提取了許多的數字爲一個int列表
輸出整行的文本文件:用數字的位數
這裏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 另外,你是對的,我應該檢查新的行字符。我沒有這麼做的唯一原因是因爲我知道該文件只包含一行,所以沒有任何讀'\ n'字符的風險。但是,最好是安全,而不是抱歉。 謝謝! – Orion
@Orion(1)例如'echo「12345」> digits.txt'會插入它(可以使用'-n'選項來避免); (2)你不需要文件後也應該關閉文件描述符 –
(1)你說得對,我用編輯器創建了這個文件,在這種情況下沒有添加任何不必要的'\ n'。 (2)注意。再次感謝! :) – Orion