Lea un archivo línea por línea en Prolog

Me gustaría leer un archivo de texto sin formato y aplicar un predicado a cada línea (los predicados contienen write que hace la salida). ¿Como podría hacerlo?

En SWI-Prolog, la solución más limpia es escribir un DCG que describa qué es una “línea” y luego llamar a un predicado para cada línea. Use la biblioteca (pio) para aplicar el DCG a un archivo.

EDITAR : según lo solicitado, considere:

 :- use_module(library(pio)). lines([]) --> call(eos), !. lines([Line|Lines]) --> line(Line), lines(Lines). eos([], []). line([]) --> ( "\n" ; call(eos) ), !. line([L|Ls]) --> [L], line(Ls). 

Uso de muestra ?- phrase_from_file(lines(Ls), 'your_file.txt').

Puede usar read para leer la secuencia. Recuerde invocar at_end_of_stream para garantizar que no haya errores de syntax.

Ejemplo:

readFile.pl

 main :- open('myFile.txt', read, Str), read_file(Str,Lines), close(Str), write(Lines), nl. read_file(Stream,[]) :- at_end_of_stream(Stream). read_file(Stream,[X|L]) :- \+ at_end_of_stream(Stream), read(Stream,X), read_file(Stream,L). 

myFile.txt

 'line 0'. 'line 1'. 'line 2'. 'line 3'. 'line 4'. 'line 5'. 'line 6'. 'line 7'. 'line 8'. 'line 9'. 

Por lo tanto, al invocar main recibirás el resultado:

 ?- main. [line 0,line 1,line 2,line 3,line 4,line 5,line 6,line 7,line 8,line 9] true 

Solo configura main . La salida aquí es un ejemplo usando write , por supuesto. Configure para que coincida con su solicitud.

Supongo que este principio se puede aplicar para responder a su pregunta. Buena suerte.

    Intereting Posts