Проверка ввода в Visual Prolog

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

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 нед., 6 дн. назад.

  • Автор
    Сообщения
  • #2798

    questioner
    Участник

    Каким образом на языке Prolog осуществить проверку корректности вводимых данных?
    Меня интересует например, как запросить повторный ввод если пользователь ввел не целое число или другие неверные данные.

    Интересует решение для Visual Prolog 5.2/Turbo 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).

Для ответа в этой теме необходимо авторизоваться.