Открыть файл в ML (SMLNJ) - PullRequest
       11

Открыть файл в ML (SMLNJ)

0 голосов
/ 30 января 2010

Мне нужно прочитать файл в 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 ]

7 голосов
/ 06 февраля 2010

для чтения из файла, следуйте этому списку строк в строке:

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 голос
/ 01 февраля 2010

Эта задача идеально подходит для разбора комбинаторов, которые вы можете украсть у моего друга Грега Моррисетта в Гарварде .

Если вы хотите понять основные идеи, прочитайте статью Грэма Хаттона Функции высшего порядка для разбора . Если вы хотите узнать, как реализовать ввод / вывод в Standard ML, обратитесь к TextIO модулю в Standard Basis Library . Если вы хотите, чтобы кто-то написал код для вас, возможно, вы попали не на тот веб-сайт.

...