- Философия, эзотерика:
- Религии:
- Познавательное
(обо всём)
/* GoogleAds */
Программа «Ввод слова с клавиатуры» - демонстрация метода повтора с помощью простой рекурсии repeat. Программа считывает строку введенную с клавиатуры, и дублирует ее на экран. Если пользователь введет stop, то программа завершается.
/* 10.03.2012 Демонстрация использования метода повтора, определенного пользователем с помощью рекурсии общего вида*/ domains name = symbol predicates write_message /* вывод приветствия */ repeat /* предикат рекурсии */ do_echo /* конечное правило повтора */ check(name) /* предикат вводимого с клавиатуры слова */ clauses /* Рекурсия общего вида, правило повтора */ repeat. repeat :- repeat. /* Вывести информацию для пользователя */ write_message :- nl, write("Введите, пожалуйста, имена"), nl, write("Я повторю их"), nl, write("Чтобы остановить ввод и вывод, введите stop"),nl,nl. /* Ввести слово с клавиатуры, вывести его на экран, повторить эти действия do_echo является конечным правилом в цепи повторений, условие выхода из которой определяется предикатом check. Благодаря тому, что правило repeat является компонентой, правило do_echo становится конечным правилом повтора. Правило повтора является первой компонентой правила do_echo. Утверждение repeat вызывает повторное выполнение всех следующих за ним компонент. Предикат readnl(Name) считывает строку с клавиатуры. Подправило check(Name) имеет два возможных значения. Одно определяется подправилом: check(stop) :- nl, write(" - OK, bye!"). Если вводимая строка имеет значение stop, то правило будет успешным. На экране появляется сообщение «Завершение программы» , и процесс повторения завершается. Символ отсечения (!) служит для прекращения откатов, если условие check выполнено. Другое значение check(Name) определяется подправилом: check(Name) :- fail. Если значение строки отлично от stop, то результат выполнения этого правила будет fail. В этом случае произойдет откат к правилу repeat. */ do_echo :- repeat, readln(Name), write(Name),nl, check(Name),!. check(stop) :- nl, write("Завершение программы"). check(Name) :- fail. /* Можно и так check(_) :- fail. */ goal write_message, do_echo.
!!Рекомендуем: Семейная Энциклопедия Здоровья ⇒ Что должен знать современный человек? ⇒ Самоанализ. Работа над собой ⇒ Оглавление ⇒ Главная сайта