将整数文件读入sml中的整数列表
Reading an integer file to an integer list in sml
您好,我不会在标准 ML 中创建一个函数,该函数以多行中用空格分隔的输入整数作为输入整数,并且 return 逐一列出它们。
例如,对于输入文件
3 4 5 6 7 8 4
4 5 6 2 3
6 4 3 2
2 3 5 6 7
到return列表[3,4,5,6,7,8,4,4,5,6,2,3,6,4,3,2,2,3,5,6,7]
。
我曾试图自己弄明白,但我做不到,因为我对 ML 的 IO 函数不太了解。
我将不胜感激你的帮助。
谢谢
您可以使用 TextIO.scanStream
and Int.scan
的组合。这将生成一个 int option
,如果可用,它包含文件中的下一个整数。
然后您可以简单地建立文件中所有整数的列表,方法是重复调用此函数直到您得到 NONE
,表示没有更多的整数。
我同意塞巴斯蒂安的观点。
这是一个读取整数
的示例
fun int_from_stream stream =
Option.valOf (TextIO.scanStream (Int.scan StringCvt.DEC) stream)
val fstream = TextIO.openIn file
val N = int_from_stream fstream
试试这个:)
fun readint(infile : string) = let
val ins = TextIO.openIn infile
fun loop ins =
case TextIO.scanStream( Int.scan StringCvt.DEC) ins of
SOME int => int :: loop ins
| NONE => []
in
loop ins before TextIO.closeIn ins
end;
您好,我不会在标准 ML 中创建一个函数,该函数以多行中用空格分隔的输入整数作为输入整数,并且 return 逐一列出它们。 例如,对于输入文件
3 4 5 6 7 8 4
4 5 6 2 3
6 4 3 2
2 3 5 6 7
到return列表[3,4,5,6,7,8,4,4,5,6,2,3,6,4,3,2,2,3,5,6,7]
。
我曾试图自己弄明白,但我做不到,因为我对 ML 的 IO 函数不太了解。 我将不胜感激你的帮助。 谢谢
您可以使用 TextIO.scanStream
and Int.scan
的组合。这将生成一个 int option
,如果可用,它包含文件中的下一个整数。
然后您可以简单地建立文件中所有整数的列表,方法是重复调用此函数直到您得到 NONE
,表示没有更多的整数。
我同意塞巴斯蒂安的观点。 这是一个读取整数
的示例fun int_from_stream stream =
Option.valOf (TextIO.scanStream (Int.scan StringCvt.DEC) stream)
val fstream = TextIO.openIn file
val N = int_from_stream fstream
试试这个:)
fun readint(infile : string) = let
val ins = TextIO.openIn infile
fun loop ins =
case TextIO.scanStream( Int.scan StringCvt.DEC) ins of
SOME int => int :: loop ins
| NONE => []
in
loop ins before TextIO.closeIn ins
end;