Ответ в теме: Количество положительных и отрицательных чисел в файле Visual Prolog

      Комментарии к записи Ответ в теме: Количество положительных и отрицательных чисел в файле Visual Prolog отключены
#2931

Код весь не правильный. Часть проблем удалось бы избежать, если бы вы просто постарались оформить код в соответствии с этим маленьким соглашением о кодировании на Prolog – для начала, нужно дать именам переменных и функций осмысленные имена и записывать код не в одну строчку (я исправил форматирование). Даже пролог подсказывает вам, что переменным K1 и T1 не присвоено значение до того, как они будут использованы.

Если вы хотите работать с файлом в Visual Prolog – сначала надо объявить тип файла в разделе domains:

domains
  file = my_input_file; my_output_file

После этого вы можете использовать имя file при описании предикатов (если им требуется работать с каким-либо файлом, переданным в качестве аргумента) и имена my_input_file/my_output_file для задания идентификатора файла с которым нужно работать (вместо f1 в вашем коде).

После того, как я изменил форматирование кода, стало видно, почему интерпретатор ругается на переменные K1 и T1:

file_read(K,T,Z):-
  not(eof(f1)), 
  /* ... */
  file_read(K1,T1,Z); 
  K1 > T1, Z=("Да"); 
  /* ... */

Код, расположенный после точки с запятой получает управление только если вычисления блока кода до точки с запятой завершается неудачей. Т.е. в вашем случае сравнение K1 > T1 будет выполняться, например, если файл кончился (not(eof(f1)) вернул fail). Если вам не понятно почему программа работает именно так – читайте статью Принципы построения программ на Prolog.