% Больше не спрашивать

                fail.

% Известен ли ответ для всех конкретизации утверждения Цель?

        ответпольз( Цель, Копия, _, Ответ, _ ) :-

                сказано( Копия, Ответ, _ ),

                конкретизация( Копия, Цель),  !.       % Ответ известен

% Найти все известные решения для Цель с индексами, начиная с N

        ответпольз( Цель, _, _, правда, N) :-

                сказано( Цель, правда, М),

                М >= N.

% Все уже сказано об утверждении Цель?

        ответпольз( Цель, Копия, _, Ответ, _) :-

                конец_ответов( Копия),

                конкретизация( Копия, Цель),  !,      % Уже все сказано

                fail.

% Попросить пользователя дать (еще) решения

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

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

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

                можно спросить( Цель, ВнешФормат),

                формат( Цель, ВнешФормат, Вопрос, [ ], Перем),

                                                                     % Получить формат вопроса

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

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

                nl,

                ( Перем = [ ],  !,                       % Сформулировать вопрос

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

                write( 'Есть (еще) решения для :' )),

                write( Вопрос), write( '?'),

                принять( Ответ1),  !,              % Ответ1 - да/нет/почему

                обработать( Ответ1, Цель, Вопрос, Перем,

                                                                                Трасса, Ответ, N).

        обработать( почему, Цель, Вопрос, Перем,

                                                                                Трасса, Ответ, N):-

                 выд_трассу( Трасса),

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

        обработать( да, Цель,_, Перем, Трасса, правда, N) :-

                след_индекс( Инд),

                                        % Получить новый индекс для 'сказано'

                Инд1 is Инд + 1,

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

0

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

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