указывает истинно оно или ложно. Если пользователь спросит 'почему', то ему выдается Трасса. Если утверждение Цель истинно, то пользователь укажет также значения содержащихся в нем переменных (если таковые имеются).

Все вышеизложенное можно запрограммировать (в качестве первой попытки) следующим образом:

        остветпольз( Цель, Трасса, Ответ) :-

                можно_спросить( Цель),            % Можно ли спрашивать

                спросить( Цель, Трасса, Ответ).

                            % Задать вопрос относительно утверждения Цель

        спросить( Цель, Трасса, Ответ) :-

                показать( Цель),

                            % Показать пользователю вопрос

                принять(Ответ1),                        % Прочесть ответ

                обработать( Ответ1, Цель, Трасса, Ответ).

                            % Обработать ответ

        обработать( почему, Цель, Трасса, Ответ) :-

                            % Задан вопрос 'почему'

                показать_трассу( Трасса),

                            % Выдача ответа на вопрос 'почему'

                спросить( Цель, Трасса, Ответ).

                            % Еще раз спросить

        обработать( да, Цель, Трасса, Ответ) :-

                            % Пользователь ответил, что Цель истинна

                Ответ = правда,

                запрос_перем( Цель);

                            % Вопрос о значении переменных

                спросить( Цель, Трасса, Ответ).

                            % Потребовать от пользователя новых решений

        обработать( нет, Цель, Трасса, ложь).

                            % Пользователь ответил, что Цель ложна

        показать( Цель) :-

                nl, write( 'Это правда:'),

                write( Цель), write( ?), nl.

Обращение к процедуре запрос_перем( Цель) нужно для того, чтобы попросить пользователя указать значение каждой из переменных, содержащихся в утверждении Цель:

        запрос_перем( Терм) :-

                var( Терм),  !,                  % Переменная ?

                nl, write( Терм), write( '='),

                read( Терм).                    % Считать значение переменной

        запрос_перем( Терм) :-

                Терм =.. [Функтор | Аргументы],

                                % Получить аргументы структуры

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату