время работы над программой: 1999 г.
использованные технологии: Turbo Prolog 2.0
платформа: DOS

результат работы программы:
Экспертная система классификации растений

Исходник программы:

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("Данного растения в базе знаний не обнаружено").

Список использованой литературы:

  1. К. Вилли, В. Детье «Биология. Биологические процессы и законы», М. «Мир», 1974
  2. «Биология. Справочные материалы» под ред. Д. И. Трайтака, М. «Просвещение», 1987
Hosted by uCoz