/* В данной прграмме решается та же задача, что и в
lab33.pro, но для уменьшения количества предикатов и
предложений использовано предложение da(X), позволя-
ющее проверить, был ли ранее получен положительный
ответ на вопрос"X?". Если положительного ответа не
было, программа задаст вопрос и в случае положитель-
ного ответа зафиксирует его в динамической базе дан-
ных. Обратите внимание на то, что отрицательные от-
веты не фиксируются. */
database
otvet_da(symbol)
otvet_net(symbol)
predicates
class(symbol)
giv(symbol)
da(symbol)
run(symbol)
clauses
run(X):-retractall(otvet_da(_)),
retractall(otvet_net(_)),
giv(X),!.
giv("обезьяна"):- class("млекоп."),
da("имеет темные пятна").
giv("тигр"):- class("млекоп."),
da("имеет черные полосы").
giv("пингвин"):- class("птица"),
da("цвет черно-белый"),
not(da("умеет летать")).
giv("альбатрос"):- class("птица"),
da("хорошо летает").
/* промеж. гипотезы - подцели */
class("млекоп."):- da("имеет волосы"),
da("дает молоко").
class("птица"):- da("имеет перья");
da("умеет летать"),
da("откладывает яйца").
/* проверка, вопрос, фиксация ответа */
da(X):- otvet_da(X),!;
otvet_net(X),!,fail;
write(X," (y/n)?"),nl,
readchar(P),
P='y',assertz(otvet_da(X)),!;
P='n',assertz(otvet_net(X)),fail. |