результат работы программы:
database yes (symbol) no (symbol) predicates begin answer question(symbol) rastenie(symbol) morfologia(symbol) add_to_database(symbol,char) input_simbol(char,char) otvet(char) repeat clear_from_database goal begin. clauses begin :- makewindow (2,23,30," Классификация растений ",0,0,25,80), gotowindow(2), nl,write ("Ответьте на вопросы :"),nl,nl, answer, not(clear_from_database), readchar(X), nl,nl,nl,nl, write ("Нажмите любую клавишу."), removewindow, exit. answer :- rastenie (X),!,nl, write (" Ответ: ",X,"."),nl. question(Y) :- write ("Вoпрос: ",Y,"? "), otvet(X), write(X),nl, add_to_database (Y,X). input_simbol(C,'y') :- C='y',!. input_simbol(C,'n') :- C='n',!. input_simbol(C,'y') :- C='Y',!. input_simbol(C,'n') :- C='N',!. otvet(C):- repeat, readchar(X), input_simbol(X,C),!. repeat. repeat:-repeat. morfologia (Y) :- yes (Y),!. morfologia (Y) :- not (no (Y)), question (Y). add_to_database (Y,'y') :- assertz (yes (Y)). add_to_database (Y,'n') :- assertz (no (Y)),fail. clear_from_database :- retract (yes(_)),fail. clear_from_database :- retract (no(_)),fail. rastenie("Растение принадлежит к плотнокустовым злакам"):- rastenie("Растение принадлежит семейству злаки"), morfologia("Боковые побеги растут вертикально"). rastenie("Растение принадлежит к рыхлокустовым злакам"):- rastenie("Растение принадлежит семейству злаки"), morfologia("Боковые побеги отходят под острым углом к вертикальному"). rastenie("Растение принадлежит к корневищным злакам"):- rastenie("Растение принадлежит семейству злаки"), morfologia("Побеги развиваются горизонтально под землей"). rastenie("Растение принадлежит семейству злаки"):- rastenie("Растение принадлежит подклассу Однодольные"), morfologia("Цветки собраны в колосок"). rastenie("Растение принадлежит семейству Лилейные"):- rastenie("Растение принадлежит подклассу Однодольные"), morfologia("6 сросшихся лепестков"); rastenie("Растение принадлежит подклассу Однодольные"), morfologia("3 наружных и 3 внутренних лепестка"). rastenie("Растение принадлежит подклассу Однодольные"):- rastenie("Растение принадлежит классу Покрытосеменные"), morfologia("Одна семядоля"). rastenie("Растение принадлежит семейству Сложноцветные"):- rastenie("Растение принадлежит подклассу Двудольные"), morfologia("Плод семянка или семянка с летучкой-хохолком"). rastenie("Растение принадлежит семейству Крестоцветные"):- rastenie("Растение принадлежит подклассу Двудольные"), morfologia("4 лепестка крест-накрест"). rastenie("Растение принадлежит семейству Пасленовые"):- rastenie("Растение принадлежит подклассу Двудольные"), morfologia("5 лепестков"), morfologia("Лепестки сросшиеся"). rastenie("Растение принадлежит семейству Бобовые"):- rastenie("Растение принадлежит подклассу Двудольные"), morfologia("5 лепестков"), morfologia("Цветок по форме напоминает лодочку"). rastenie("Растение принадлежит семейству Розоцветные"):- rastenie("Растение принадлежит подклассу Двудольные"), morfologia("5 лепестков"), morfologia("Части цветка располагаются кругами"). rastenie("Растение принадлежит подклассу Двудольные"):- rastenie("Растение принадлежит классу Покрытосеменные"), not(morfologia("Одна семядоля")). rastenie("Растение принадлежит классу Покрытосеменные"):- rastenie("Семенные"), morfologia("Есть цветки"). rastenie("Семенные папоротники, беннетиты, кордаиты"):- rastenie("Растение принадлежит классу Голосеменные"), not(morfologia("Существует сейчас")). rastenie("Саговники"):- rastenie("Растение принадлежит классу Голосеменные"), morfologia("Существует сейчас"), morfologia("Широкие, сложные рассеченные листья"). rastenie("Гинкго"):- rastenie("Растение принадлежит классу Голосеменные"), morfologia("Существует сейчас"), morfologia("Есть веерообразные листья, опадающие осенью"). rastenie("Хвойные"):- rastenie("Растение принадлежит классу Голосеменные"), morfologia("Существует сейчас"), morfologia("Есть иглы"). rastenie("Растение принадлежит классу Голосеменные"):- rastenie("Семенные"), not(morfologia("Есть цветки")). rastenie("Семенные"):- rastenie("Высшие растения"), morfologia("Есть семена"). rastenie("Папоротники"):- rastenie("Папоротникообразные"), morfologia("Споры образуются на листьях"). rastenie("Хвощи, плауны"):- rastenie("Папоротникообразные"), morfologia("Споры образуются на верхушках побегов"). rastenie("Папоротникообразные"):- rastenie("Споровые"), morfologia("Есть корни"). rastenie("Мхи"):- rastenie("Споровые"), not(morfologia("Есть корни")). rastenie("Споровые"):- rastenie("Высшие растения"), morfologia("Есть споры"). rastenie("Высшие растения"):- morfologia("Есть расчленение на корень, стебель и листья"). rastenie("Красные водоросли"):- rastenie("Водоросли"), morfologia("Прикрепляется ко дну"), morfologia("В клетках присутствует красный пигмент"). rastenie("Бурые водоросли"):- rastenie("Водоросли"), morfologia("Прикрепляется ко дну"), morfologia("В клетках присутствует золотисто-бурый пигмент"). rastenie("Десмидиевые"):- rastenie("Одноклеточные зеленые водоросли"), morfologia("Под микроскопом выглядит как снежинка"). rastenie("Одноклеточные зеленые водоросли"):- rastenie("Зеленые водоросли"), rastenie("Одноклеточные"). rastenie("Харовые"):- rastenie("Многоклеточные зеленые водоросли"), morfologia("Есть образования по форме и функциям напоминающие корни, стебли, листья и семена"). rastenie("Многоклеточные зеленые водоросли"):- rastenie("Зеленые водоросли"), not(rastenie("Одноклеточные")). rastenie("Зеленые водоросли"):- rastenie("Водоросли"), morfologia("В клетках присутствует зеленый пигмент"). rastenie("Водоросли"):- rastenie("Низшие растения"), morfologia("Живет в воде"). rastenie("Низшие растения"):- not(morfologia("Есть расчленение на корень, стебель и листья")). rastenie("Одноклеточные"):- not(morfologia("Клеток больше чем одна")). rastenie("Данного растения в базе знаний не обнаружено").