Вход/Регистрация
Prolog
вернуться

Неизвестно

Шрифт:

Терм = пер/N,

Nплюс1 is N + 1.

% Процедура

%

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

%

% порождает, используя механизм возвратов, все решения

% для целевого утверждения Цель, которые указал пользователь.

% Трасса - это цепочка целей-предков и правил,

% используемая для объяснения типа "почему".

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

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

копия( Цель, Копия), % Переименование переменных

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

% Не спрашивать второй раз относительно конкретизированной цели

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

N > 1, % Повторный вопрос?

конкретный( Цель), !, % Больше не спрашивать

fail.

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

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

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

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

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

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

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

М >= N.

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

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

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

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

fail.

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

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

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

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

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

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

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

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

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

nl,

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

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

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

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

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

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

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

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

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

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

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

  • Читать дальше
  • 1
  • ...
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: