fork download
  1. database
  2. yes(string)
  3. no(string)
  4. maybe(string)
  5.  
  6. predicates
  7. run
  8. make_selection(string, integer, integer)
  9. continue_selection(integer, string, integer)
  10. tel(string,integer)
  11. is(string)
  12. positive(string)
  13. negative(string)
  14. xpositive(string)
  15. xnegative(string)
  16. ask(string,char)
  17. remember(string,char)
  18. delete_all
  19. clauses
  20. %-----------------------------------------------------------------------------
  21. % описываем технические характеристики сотового телефона
  22. tel("Samsung E1070", 890):- positive("цветной дисплей"),positive("емкий аккумулятор"),
  23. negative("имеет камеру"),
  24. negative("имеет FM-радио"),
  25. negative("имеет Mp3-плеер"),
  26. is("только для связи").
  27.  
  28. tel("Nokia 1202", 1000):- positive("цветной дисплей"),positive("емкий аккумулятор"),
  29. negative("имеет камеру"),
  30. negative("имеет FM-радио"),
  31. negative("имеет Mp3-плеер"),
  32. is("только для связи").
  33.  
  34. tel("Nokia 1208", 1190):-positive("цветной дисплей"),positive("емкий аккумулятор"),
  35. negative("имеет камеру"),
  36. negative("имеет FM-радио"),
  37. negative("имеет Mp3-плеер"),
  38. is("только для связи").
  39.  
  40.  
  41.  
  42. tel("Nokia 2630", 2490):-positive("цветной дисплей"),positive("емкий аккумулятор"),
  43. negative ("имеет камеру"),
  44. positive ("имеет FM-радио"),
  45. negative("имеет Mp3-плеер"),
  46. is("только для связи"), is("развлечения и музыка").
  47.  
  48. tel("LG KP105", 1490):- positive("цветной дисплей"),positive("емкий аккумулятор"),
  49. negative ("имеет камеру"),
  50. positive ("имеет FM-радио"),
  51. negative("имеет Mp3-плеер"),
  52. is("только для связи").
  53.  
  54. tel("LG GB110", 2550):- positive("цветной дисплей"),positive("емкий аккумулятор"),
  55. negative ("имеет камеру"),
  56. positive ("имеет FM-радио"),
  57. negative ("имеет Mp3-плеер"),
  58. is("только для связи"), is("развлечения и музыка").
  59.  
  60.  
  61. tel("Nokia E52", 12990):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  62. positive ("имеет камеру"),
  63. positive ("имеет FM-радио"),
  64. positive ("имеет флэш-карту"),
  65. negative("имеет навигацию"),
  66. negative("имеет Mp3-плеер"),
  67. is("мобильный офис").
  68.  
  69. tel("Nokia E66", 11890):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  70. positive ("имеет камеру"),
  71. positive ("имеет FM-радио"),
  72. positive ("имеет флэш-карту"),
  73. negative ("имеет навигацию"),
  74. negative("имеет Mp3-плеер"),
  75. is("мобильный офис"), is("помощник в путешествиях").
  76.  
  77.  
  78. tel("Nokia E63", 13500):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  79. positive ("имеет камеру"),
  80. positive ("имеет FM-радио"),
  81. positive ("имеет флэш-карту"),
  82. negative ("имеет навигацию"),
  83. negative("имеет Mp3-плеер"),
  84. is("мобильный офис"), is("помощник в путешествиях").
  85.  
  86. tel("Nokia 5310", 7990):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  87. positive ("имеет камеру"),
  88. positive ("имеет FM-радио"),
  89. positive ("имеет флэш-карту"),
  90. positive ("имеет Mp3-плеер"),
  91. negative("сенсорный дисплей"),
  92. positive ("имеет дополнительные клавиши управления Mp3-плеером"),
  93. is("развлечения и музыка").
  94.  
  95. tel("Nokia 5530", 7780):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  96. positive ("имеет камеру"),
  97. positive ("имеет FM-радио"),
  98. positive ("имеет флэш-карту"),
  99. positive ("имеет Mp3-плеер"),
  100. negative ("сенсорный дисплей"),
  101. positive ("имеет дополнительные клавиши управления Mp3-плеером"),
  102. is("развлечения и музыка").
  103.  
  104. tel("Nokia 5800", 8890):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  105. positive ("имеет камеру"),
  106. positive ("имеет FM-радио"),
  107. positive ("имеет флэш-карту"),
  108. positive ("имеет Mp3-плеер"),
  109. negative ("сенсорный дисплей"),
  110. positive ("имеет дополнительные клавиши управления Mp3-плеером"),
  111. is("развлечения и музыка"), is("мобильный офис"),is ("помощник в путешествиях").
  112.  
  113. tel("SonyEricsson W595", 8450):- positive("цветной дисплей"), negative ("емкий аккумулятор"),
  114. positive ("имеет камеру"),
  115. positive ("имеет FM-радио"),
  116. positive ("имеет флэш-карту"),
  117. positive ("имеет Mp3-плеер"),
  118. negative("сенсорный дисплей"),
  119. negative ("имеет дополнительные клавиши управления Mp3-плеером"),
  120. is("развлечения и музыка").
  121.  
  122. tel("SonyEricsson W395", 7890):- positive("цветной дисплей"), negative ("емкий аккумулятор"),
  123. positive ("имеет камеру"),
  124. positive ("имеет FM-радио"),
  125. positive ("имеет флэш-карту"),
  126. positive ("имеет Mp3-плеер"),
  127. negative("сенсорный дисплей"),
  128. negative ("имеет дополнительные клавиши управления Mp3-плеером"),
  129. is("развлечения и музыка").
  130.  
  131. tel("Nokia N86", 24790):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  132. positive ("имеет камеру"),
  133. positive ("имеет FM-радио"),
  134. positive ("имеет флэш-карту"),
  135. positive ("имеет навигацию"),
  136. positive ("имеет Mp3-плеер"),
  137. negative ("имеет Wi-Fi"),
  138. positive ("имеет дополнительную клавиатуру"),
  139. is("помощник в путешествиях"), is("мобильный офис").
  140.  
  141. tel("Nokia N97", 27990):- positive("цветной дисплей"), positive ("емкий аккумулятор"),
  142. positive ("имеет камеру"),
  143. positive ("имеет FM-радио"),
  144. positive ("имеет флэш-карту"),
  145. positive ("имеет навигацию"),
  146. positive ("имеет Mp3-плеер"),
  147. negative ("имеет Wi-Fi"),
  148. positive ("имеет дополнительную клавиатуру"),
  149. is("помощник в путешествиях"), is("мобильный офис"), is("развлечения и музыка").
  150.  
  151. tel("Такой телефон еще не произведен!!!!", 0).
  152.  
  153. %-----------------------------------------------------------------------------
  154. is("только для связи"):-positive("звонить и отправлять смс"),!.
  155. is("мобильный офис"):- positive("смартфон"),!;
  156. negative("слушать музыку"),
  157. positive("звонить и отправлять смс").
  158. is("развлечения и музыка"):- positive("слушать музыку"),!;
  159. positive("звонить и отправлять смс"),
  160. negative("смартфон").
  161. is("помощник в путешествиях"):-positive("имеет GPS-навигацию").
  162. %-----------------------------------------------------------------------------
  163. % работа с динамической базой данных
  164. positive(X):-xpositive(X),!; xnegative(X),!,fail; ask(X,'y').
  165. negative(X):-xnegative(X),!; xpositive(X),!,fail; ask(X,'n').
  166. ask(X,R):-write(X," ? : "),readchar(Reply),write(Reply,"\n"),
  167. remember(X,Reply),R=Reply.
  168. % проверка присутствия фактов в динамической базе данных
  169. xpositive(X):-yes(X);maybe(X).
  170. xnegative(X):-no(X);maybe(X).
  171. % запоминаем факт в динамической базе данных
  172. remember(X,'y'):-asserta(yes(X)).
  173. remember(X,'n'):-assertz(no(X)).
  174. remember(X,'q'):-asserta(maybe(X)).
  175. % очищаем память от фактов динамической базы данных
  176. delete_all:-retract(yes(_)),delete_all.
  177. delete_all:-retract(no(_)),delete_all.
  178. delete_all:-retract(maybe(_)),delete_all.
  179. delete_all.
  180. %-----------------------------------------------------------------------------
  181. run:-delete_all,
  182. %repeat,
  183. write("На вопросы отвечать (y-да, n-нет, q-не знаю).\n"),
  184.  
  185. make_selection(X, A, CHOOSE),
  186. continue_selection(CHOOSE, X, A),
  187. write("Завершить работу программы (y/n): "),readchar(Z),
  188. write(Z),nl,
  189. Z='y', !.
  190.  
  191. make_selection(X, A, CHOOSE) :- tel(X,A), write("Ваш выбор: ",X," цена: ",A,"\n"),
  192. write("Устраивает ли вас цена? \n1-да, данная модель меня устраивает\n2-нет, покажите модель по дешевле\n3-нет, покажите модель по дороже"),
  193. readchar(CHOOSE).
  194.  
  195. continue_selection('1', X, A) :- !, write("Ваш выбор: ",X," цена: ",A,"\n"), !.
  196. continue_selection('2', X, A) :- !, tel(X, Z), Z < A, write("-->>", X, " - ", A).
  197. goal
  198. makewindow(1,10,12," Экспертная система : СОТОВЫЕ ТЕЛЕФОНЫ ",0,0,25,80),
  199. write("--------------------------------------------"),nl,
  200. run.
Success #stdin #stdout 0.02s 6204KB
stdin
Standard input is empty
stdout
Standard output is empty