我正在尝试导入包含整数的SML / NJ中的文本文件。 虽然我的方法适用于小输入,但在尝试导入更大的文件时会出现溢出。
在文件中,第一个整数是后面的元素数,最多可以是2 * 10 ^ 6,后面的数字可以是最大10 ^ 9的正整数。鉴于这些数字在Int限制范围内:
程序的堆栈是否太小而且我有溢出? SML / NJ中的列表是否存在大小限制。
我将整数读入列表的代码:
fun parse file =
let
fun next_int input =
Option.valOf (TextIO.scanStream (Int.scan StringCvt.DEC) input)
val stream = TextIO.openIn file
val n = next_int stream
val _ = TextIO.inputLine stream
fun scanner 0 acc = acc
| scanner i acc =
let
val d = next_int stream
in
scanner (i - 1) (d :: acc)
end
in
(n, rev(scanner n []))
end
我得到的错误:
uncaught exception Overflow [overflow]
raised at: Basis/Implementation/num-scan.sml:231.20-231.28