我需要读取ML(SLMNJ)中的文件并将其保存在某些结构中。我需要阅读一些指向图形声明的数据:
[( 1 , 2 , 13 ),( 2 , 3 , 3 ),( 2 , 4 , 8 ),( 2 , 5 , 4 ),( 3 , 1 , 5 ),( 3 , 4 , 1 ),( 4 , 6 , 5 ),( 5 , 5 , 5 ),( 6 , 4 , 6 )]
(第一个数字:节点的名称,第二个数字:已连接节点的名称,此鬃毛的第三个数字权重(每个()显示一个鬃毛))
for expamle这是测试输入如何读取文件以及保存它的结构
答案 0 :(得分:7)
从文件读取后跟随此行到每行的字符串列表:
val infile = "c:/input.txt" ;
fun readlist (infile : string) = let
val ins = TextIO.openIn infile
fun loop ins =
case TextIO.inputLine ins of
SOME line => line :: loop ins
| NONE => []
in
loop ins before TextIO.closeIn ins
end ;
val pureGraph = readlist(infile);
使用此函数可以将其解析为元组(x,y,z):
fun creatGraph([],reList) = reList
|creatGraph(x::y::z::input,reList) = creatGraph(input,reList@[(x,y,z)]);
答案 1 :(得分:1)
此问题非常适合解析组合器,您可以steal from my friend Greg Morrisett at Harvard。
如果您想了解基本想法,请阅读Graham Hutton的论文Higher-Order Functions for Parsing。如果您想知道如何在标准ML中实现I / O,请参阅TextIO
module中的Standard Basis Library。如果您希望有人为您编写代码,您可能已经到达了错误的网站。