0

我需要读取 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 )]

(第一个数字:节点名称,第二个数字:连接节点的名称,第三个数字权重(每个()显示一个鬃毛))

例如,这是测试输入如何读取文件以及保存它的结构

4

2 回答 2

8

要从文件中读取,请按照此到每行的字符串列表:

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)]);
于 2010-02-06T09:12:01.373 回答
1

这个问题非常适合解析组合子,你可以从我在哈佛的朋友 Greg Morrisett 那里偷来

如果您想了解基本思想,请阅读 Graham Hutton 的论文Higher-Order Functions for Parsing。如果您想知道如何在标准 ML 中实现 I/O,请查阅标准基础库中的TextIO模块。如果您希望有人为您编写代码,您可能访问了错误的网站。

于 2010-02-01T03:03:41.830 回答