Улучшить экспертную систему - Prolog

Узнай цену своей работы

Формулировка задачи:

Необходимо улучшить экспертную систему, необходимо добавить счетчик результатов, и начинаться опрос должен именно с самого популярного результата. Т.е. если по результатам опроса чаще всего выпадает Ruby, то каждый новый опрос должен начинаться с него. Нужна помощь. Если эта не очень простая задача, кто может реализовать отпишитесь, мб договоримся.
Листинг программы
  1. database
  2. dpositive(symbol)
  3. dnegative(symbol)
  4. predicates
  5. go
  6. do_consulting
  7. ask(symbol)
  8. language(symbol)
  9. it_is(symbol)
  10. positive(symbol)
  11. negative(symbol)
  12. remember(symbol, char)
  13. clear_facts
  14. goal
  15. go.
  16. clauses
  17. /* System user interface */
  18. go :-
  19. makewindow(1, 7, 7, "EXPERT SYSTEM", 0, 0, 25, 80),
  20. nl,write(" * * * * * * * * * * * * * * * * * * * "),
  21. nl,write(" PROGRAMMING LANGUAGES "),nl,
  22. nl,write(" Answer questions only 'y' or 'n' "),nl,
  23. nl,write(" * * * * * * * * * * * * * * * * * * * "),
  24. nl,nl,do_consulting,
  25. nl, readchar(_), removewindow.
  26. do_consulting :-
  27. language(X), !, nl,
  28. write("Your language: ",X),nl,
  29. clear_facts.
  30. do_consulting :-
  31. nl, write("No results!"),
  32. clear_facts.
  33. ask(X) :-
  34. write(X, " : "),
  35. readchar(Reply),
  36. write(Reply,"\n"),
  37. remember(X, Reply).
  38. /* Mechanism output */
  39. positive(X) :- dpositive(X),!.
  40. positive(X) :- not(negative(X)),!,ask(X).
  41. negative(X) :- dnegative(X),!.
  42. remember(_,27) :- exit.
  43. remember(X,'y') :- asserta(dpositive(X)).
  44. remember(X,'n') :- asserta(dnegative(X)),fail.
  45. clear_facts :- retract(dpositive(_)), fail.
  46. clear_facts :- retract(dnegative(_)), fail.
  47. /* Production rules */
  48. language("JavaScript"):-
  49. it_is("Do you want to develop web applications?"),
  50. positive("Do you want to work for yourself?"),
  51. positive("You are a creative person?"),
  52. positive("Are you willing to constantly learn something new?"),!.
  53. language("Ruby"):-
  54. it_is("Do you want to develop web applications?"),
  55. positive("Do you want to work for yourself?"),
  56. positive("Are you willing to constantly learn something new?"),!.

Решение задачи: «Улучшить экспертную систему»

textual
Листинг программы
  1. domains
  2.     conditions = integer *  
  3.     history = integer *
  4.    
  5. database
  6.     rule(integer, symbol,symbol, conditions)
  7.     cond(integer, symbol)
  8.     yes(integer)
  9.     no(integer)
  10.    
  11. predicates
  12.     do_expert_job
  13.     do_consulting
  14.     clear
  15.  
  16.     go(history, symbol)
  17.     check(integer, history, conditions)
  18.     Inpo(history, integer, integer, symbol)
  19.     do_answer(history, integer, symbol, integer, char)
  20.  
  21. goal
  22.   do_expert_job.
  23.  
  24. clauses
  25.  
  26. /* System user interface */
  27.    
  28.     do_expert_job :-
  29.         makewindow(1, 7, 7, "EXPERT SYSTEM", 0, 0, 25, 80),
  30.         nl,write(" * * * * * * * * * * * * * * * * * * * "),
  31.         nl,write("        PROGRAMMING LANGUAGES        "),nl,
  32.         nl,write("   Answer questions only 'y' or 'n'   "),nl,
  33.         nl,write(" * * * * * * * * * * * * * * * * * * * "),
  34.         nl,nl,do_consulting,
  35.         nl, readchar(_), removewindow.
  36.                            
  37.     do_consulting :-go([],"Language"),!.
  38.     do_consulting :-nl, write("No results!"), clear.
  39.     do_consulting.
  40.                
  41.     inpo(HISTORY,RNO,BNO,TEXT) :-
  42.         write(TEXT," : "),
  43.         readchar(RESPONSE),
  44.         do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).
  45.  
  46. /* Mechanism output */
  47.  
  48.     go(HISTORY, Mygoal) :-
  49.         rule(RNO,Mygoal,NY,COND),
  50.         check(RNO,HISTORY,COND),!,
  51.         go([RNO|HISTORY],NY).
  52.        
  53.     go(_,Mygoal) :-
  54.         not(rule(_,Mygoal,_,_)),!,                    
  55.         nl,write("Your language:  ",Mygoal), clear.
  56.      
  57.     check(RNO,HISTORY,[BNO|REST]) :-yes(BNO),!,check(RNO,HISTORY,REST).
  58.     check(_,_,[BNO|_]) :- no(BNO),!,fail.
  59.     check(RNO,HISTORY,[BNO|REST]) :-
  60.         cond(BNO,TEXT),
  61.         inpo(HISTORY,RNO,BNO,TEXT),
  62.         check(RNO,HISTORY,REST).
  63.     check(_,_,[]).
  64.      
  65.     do_answer(_,_,_,_, 27) :-exit.
  66.     do_answer(_,_,_,BNO,'y') :-assert(yes(BNO)),write(y),nl.
  67.     do_answer(_,_,_,BNO,'n') :-assert(no(BNO)),write(n),nl,fail.
  68.      
  69.     clear :-retract(yes(_)),retract(no(_)),fail,!.
  70.     clear.                           
  71.                            
  72. /* Knowledge base */
  73.  
  74.     rule(1, "Language", "Web applications", [1]).
  75.     rule(2, "Language", "Applications for phone", [2]).
  76.     rule(3, "Language", "Desktop applications", [3]).
  77.     rule(4, "Language", "Drivers", [4]).
  78.     rule(5, "Language", "Expert systems", [5]).
  79.     rule(6, "Web applications", "JavaScript", [6,7,8]).
  80.     rule(7, "Web applications", "Ruby", [7,8]).
  81.  
  82.     cond(1, "Do you want to develop web applications?").
  83.     cond(2, "Do you want to develop applications for phone?").
  84.     cond(3, "Do you want to develop desktop applications?").
  85.     cond(4, "Do you want to develop drivers?").
  86.     cond(5, "Do you want to develop expert systems?").
  87.     cond(6, "Do you want to work for yourself?").
  88.     cond(7, "You are a creative person?").
  89.     cond(8, "Are you willing to constantly learn something new?").

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут