fun sumFile (filename : string) : int =
let
val instream = TextIO.openIn filename
fun sumHelper (sum : int) : int =
case TextIO.inputLine instream of
NONE => sum
| SOME line =>
let
val num = Int.fromString line
in
case num of
NONE => sumHelper sum
| SOME i => sumHelper (sum+i)
end
in
sumHelper 0
end
思路:定义一个函数 sumFile
,输入文件名 filename
,利用 TextIO.openIn
函数打开文件流,然后读取每行数字,使用 Int.fromString
将其转化为整数并累加求和,最后返回总和。
注意:需要使用 SML 的 I/O 模块 TextIO
和类型 string
、int
等相关类型。此外,要注意文件名的格式是“input.txt”。如果文件名不合法或文件中含有非数字的字符,程序会返回 0。