Проблемы с прологом

#file-io #prolog

#файл-ввод-вывод #пролог

Вопрос:

Я использую swi prolog. Мой код выполняется для первой строки, но он не запускает остальные.

  see(Data), //open file to read
   repeat,
    readln(A), //read line from file 
    write(A),
   A==end_of_file,!.
  

Я получаю неожиданную ошибку завершения файла. У вас есть какие-нибудь идеи?

Ответ №1:

readln / 1 отсутствует в руководстве swi-prolog, поэтому, возможно, вам следует включить код и для этого. предполагая, что он делает то, что вы говорите, код, вероятно, должен быть:

  see(Data), //open file to read
   repeat,
   readln(A), //read line from file 
   write(A),
   A=end_of_file,!.
  

«структура» repeat / 0 работает как repeat … до тех пор, пока

кстати, я бы предпочел рекурсивное решение … например

 io(end_of_file):-
    write(end_of_file).
io(_):-
    readln(A),
    write(A),
    io(A).
  

кажется более декларативным.