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 )]

(最初の番号: ノードの名前、2 番目の番号: 接続されたノードの名前、3 番目の番号 このたてがみの重み (各 () は 1 つのたてがみを示します) )

たとえば、これはファイルの読み取り方法とそれを保存する構造のテスト入力です

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 を読んでください。Standard ML で I/O を実装する方法を知りたい場合は、Standard Basis LibraryのTextIOモジュールを参照してください。誰かにコードを書いてもらいたい場合は、間違った Web サイトにアクセスしている可能性があります。

于 2010-02-01T03:03:41.830 に答える