Ввод строк до пустой. Вывод в обратном порядке

      Комментарии к записи Ввод строк до пустой. Вывод в обратном порядке отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Общие вопросы Ввод строк до пустой. Вывод в обратном порядке

Помечено: ,

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

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

    questioner
    Участник

    Нужно решить задачу на Prolog:

    Читать строки до тех пор, пока не введут пустую строку. После этого напечатать все прочитанные строки, кроме пустой, в обратном порядке

  • #2277

    В задаче требуется сохранять где-то введенные строки, чтобы затем вывести их на экран. Для хранения строк можно использовать список, каждый раз добавляя строку в начало списка. Последняя непустая строка окажется в списке первой, что даст требуемый порядок вывода. Однако, в этой задаче можно обойтись без списка, а строки сохранять в системном стеке, используя нехвостовую рекурсию:

    predicates
      read_strings_until_empty
    clauses
      read_strings_until_empty:-
        readln(String), String <> "",
        read_strings_until_empty, !,
        write(String), nl; !.
    goal
      read_strings_until_empty.

    Если строка является не пустой, то выполняется рекурсивный вызов. При этом локальные значения функции (в том числе считанная строка) будут помещены в стек. Когда рекурсивная функция завершит работу — локальные переменные восстановятся из стека и выполнится вывод строки на экран. Функция завершит работу если введена пустая строка.

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