Ответ в теме: Проверка ввода в Visual Prolog

      Комментарии к записи Ответ в теме: Проверка ввода в Visual Prolog отключены
#2799

В SWI Prolog функция ввода (read) считывает терм. Аналогичная ситуация наблюдается на многих других диалектах, соответствующих ISO. При этом тип терма будет ясен на этапе выполнения, т.к. в SWI Prolog типы не задаются программистом явно. Дальше для проверки можно использовать как ряд встроенных предикатов — таких как is_list, is_digit, так и своих собственных. Например, следующих код будет запрашивать ввод списка до тех пор пока пользователь не введен его корректно:

read_list(List):-
read(List), is_list(List), !;
read_list(List).

В Turbo и Visual Prolog типы задаются до компиляции, поэтому функции ввода тоже возвращают объекты только одного типа (функции readint, readln и прочие). Все эти функции в случае ввода некорректных данных завершают свою работу неудачей, чтобы запросить повторный ввод нужно выполнить рекурсивный вызов:

read_until_not_integer(Integer):-
readint(Integer), !;
write("it is not integer, enter again: "), 
read_until_not_integer(Integer).