I'd like to read a plain text file and apply a predicate to each line (the predicates contain write
which does the output). How would I do that?
In SWI-Prolog, the cleanest solution is to write a DCG that describes what a "line" is, then call a predicate for each line. Use library(pio) to apply the DCG to a file.
EDIT: As requested, consider:
:- 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).
Sample usage: ?- phrase_from_file(lines(Ls), 'your_file.txt').