fork download
  1. domains
  2.  
  3. conditions = integer *
  4.  
  5. history = integer *
  6.  
  7. database
  8.  
  9. /* Предикаты базы данных */
  10.  
  11. rule(integer, symbol,symbol, conditions)
  12.  
  13. cond(integer, symbol)
  14.  
  15. yes(integer)
  16.  
  17.  
  18. predicates
  19.  
  20. /* Предикаты системы пользовательского интерфейса */
  21.  
  22. do_expert_job
  23.  
  24. do_consulting
  25.  
  26. goes(symbol)
  27.  
  28. clear
  29.  
  30. /* Предикаты механизма вывода */
  31.  
  32. go(history, symbol)
  33.  
  34. check(integer, history, conditions)
  35.  
  36. Inpo(history, integer, integer, symbol)
  37.  
  38. do_answer(history, integer, symbol,integer, integer)
  39.  
  40. goal
  41.  
  42. do_expert_job.
  43.  
  44. clauses
  45.  
  46. /* База знаний (БЗ) */
  47.  
  48. rule(1, "Собака", "Короткошерстная собака", [1]).
  49.  
  50. rule(2, "Собака", "Длинношерстная собака ", [2]).
  51.  
  52. rule(3, "Короткошерстная собака","Английский бульдог",[3,5,7]).
  53.  
  54. rule(4, "Короткошерстная собака","Гончая", [3,6,7]).
  55.  
  56. rule(5, "Короткошерстная собака","Немецкий Дог", [5,6,7,8]).
  57.  
  58. rule(6, "Короткошерстная собака","Американский фоксхаунд",
  59.  
  60. [4,6,7]).
  61.  
  62. rule(7, "Длинношерстная собака ", "Кокер спаниель", [3,5,6,7]).
  63.  
  64. rule(8, "Длинношерстная собака ", "Ирландский Сеттер", [4,6]).
  65.  
  66. rule(9, "Длинношерстная собака ", "Колли", [4,5,7]).
  67.  
  68. rule(10, "Длинношерстная собака ", "Сенбернар", [5,7,8]).
  69.  
  70. cond(1,"Короткошерстная").
  71.  
  72. cond(2,"Длинношерстная").
  73.  
  74. cond(3,"Высота в холке не более 57 см").
  75.  
  76. cond(4,"Высота в холке не более 77 см ").
  77.  
  78. cond(5,"Низко посаженный хвост").
  79.  
  80. cond(6, "Длинные уши").
  81.  
  82. cond(7, "Дружелюбный характер").
  83.  
  84. cond(8, "Вес более 45 кг").
  85.  
  86. /* Система пользовательского интерфейса */
  87.  
  88. do_expert_job :-
  89.  
  90. makewindow(1,7,7,"ЭКСПЕРТ ПО ПОРОДАМ СОБАК", 0, 0, 25, 80),
  91.  
  92. do_consulting, nl, nl, nl, nl, write("Нажмите любую клавишу"),
  93.  
  94. readchar(_), exit.
  95.  
  96. do_consulting :-goes(Mygoal),go([],Mygoal),!.
  97.  
  98. do_consulting :-nl, write("Извините, я не смогу Вам помочь") ,clear.
  99.  
  100. do_consulting.
  101.  
  102. goes(Mygoal) :- clear,clearwindow, nl, nl,nl,nl,
  103.  
  104. write("ДОБРО ПОЖАЛОВАТЬ"),nl, nl, nl,
  105.  
  106. write("Проводится идентификация породы"),nl,
  107.  
  108. write("Для того, чтобы начать процесс идентификации,"),nl,
  109.  
  110. write("введите слово 'Собака'. "), nl, nl, readln(Mygoal),!.
  111.  
  112. inpo(HISTORY,RNO,BNO,TEXT) :-write("?:- ",TEXT," ? "),
  113.  
  114. makewindow(2,7,7,"Для ответа на вопрос",10,54,7,35),
  115.  
  116. write("введите 1, если Ваш ответ 'да' ,"),
  117.  
  118. write("введите 2, если Ваш ответ 'нет' ,"),
  119.  
  120. write("введите 0, для выхода из системы"),nl,
  121.  
  122. readint(RESPONSE),
  123.  
  124. clearwindow,shiftwindow(1),
  125.  
  126. do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).
  127.  
  128. /* Механизм вывода */
  129.  
  130. go(HISTORY, Mygoal) :-rule(RNO,Mygoal,NY,COND),
  131.  
  132. check(RNO,HISTORY,COND),!,
  133.  
  134. go([RNO|HISTORY],NY).
  135.  
  136. go(_,Mygoal) :-not(rule(_,Mygoal,_,_)),!,
  137.  
  138. nl,write("Вероятно Ваша собака - ",Mygoal,"."), nl, nl, nl.
  139.  
  140. check(RNO,HISTORY,[BNO|REST]) :-
  141.  
  142. yes(BNO),!,check(RNO,HISTORY,REST).
  143.  
  144. check(_,_,[BNO|_]) :- no(BNO),!,fail.
  145.  
  146. check(RNO,HISTORY,[BNO|REST]) :-cond(BNO,TEXT),
  147.  
  148. inpo(HISTORY,RNO,BNO,TEXT),
  149.  
  150. check(RNO,HISTORY,REST).
  151.  
  152. check(_,_,[]).
  153.  
  154. do_answer(_,_,_,_,0):- exit.
  155.  
  156. do_answer(_,_,_,BNO,1) :-assert(yes(BNO)),write(yes),nl.
  157.  
  158. do_answer(_,_,_,BNO,2) :-assert(no(BNO)),write(no),nl,fail.
  159.  
  160. clear :- retract(yes(_)),retract(no(_)),fail,!.
  161.  
  162. clear.
Success #stdin #stdout #stderr 0.02s 7008KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
ERROR: /home/o0QYMi/prog:2:0: Syntax error: Operator expected
ERROR: /home/o0QYMi/prog:48:0: Syntax error: Operator expected
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit