Улучшить экспертную систему - Prolog
Формулировка задачи:
Необходимо улучшить экспертную систему, необходимо добавить счетчик результатов, и начинаться опрос должен именно с самого популярного результата. Т.е. если по результатам опроса чаще всего выпадает Ruby, то каждый новый опрос должен начинаться с него.
Нужна помощь. Если эта не очень простая задача, кто может реализовать отпишитесь, мб договоримся.
Листинг программы
- database
- dpositive(symbol)
- dnegative(symbol)
- predicates
- go
- do_consulting
- ask(symbol)
- language(symbol)
- it_is(symbol)
- positive(symbol)
- negative(symbol)
- remember(symbol, char)
- clear_facts
- goal
- go.
- clauses
- /* System user interface */
- go :-
- makewindow(1, 7, 7, "EXPERT SYSTEM", 0, 0, 25, 80),
- nl,write(" * * * * * * * * * * * * * * * * * * * "),
- nl,write(" PROGRAMMING LANGUAGES "),nl,
- nl,write(" Answer questions only 'y' or 'n' "),nl,
- nl,write(" * * * * * * * * * * * * * * * * * * * "),
- nl,nl,do_consulting,
- nl, readchar(_), removewindow.
- do_consulting :-
- language(X), !, nl,
- write("Your language: ",X),nl,
- clear_facts.
- do_consulting :-
- nl, write("No results!"),
- clear_facts.
- ask(X) :-
- write(X, " : "),
- readchar(Reply),
- write(Reply,"\n"),
- remember(X, Reply).
- /* Mechanism output */
- positive(X) :- dpositive(X),!.
- positive(X) :- not(negative(X)),!,ask(X).
- negative(X) :- dnegative(X),!.
- remember(_,27) :- exit.
- remember(X,'y') :- asserta(dpositive(X)).
- remember(X,'n') :- asserta(dnegative(X)),fail.
- clear_facts :- retract(dpositive(_)), fail.
- clear_facts :- retract(dnegative(_)), fail.
- /* Production rules */
- language("JavaScript"):-
- it_is("Do you want to develop web applications?"),
- positive("Do you want to work for yourself?"),
- positive("You are a creative person?"),
- positive("Are you willing to constantly learn something new?"),!.
- language("Ruby"):-
- it_is("Do you want to develop web applications?"),
- positive("Do you want to work for yourself?"),
- positive("Are you willing to constantly learn something new?"),!.
Решение задачи: «Улучшить экспертную систему»
textual
Листинг программы
- domains
- conditions = integer *
- history = integer *
- database
- rule(integer, symbol,symbol, conditions)
- cond(integer, symbol)
- yes(integer)
- no(integer)
- predicates
- do_expert_job
- do_consulting
- clear
- go(history, symbol)
- check(integer, history, conditions)
- Inpo(history, integer, integer, symbol)
- do_answer(history, integer, symbol, integer, char)
- goal
- do_expert_job.
- clauses
- /* System user interface */
- do_expert_job :-
- makewindow(1, 7, 7, "EXPERT SYSTEM", 0, 0, 25, 80),
- nl,write(" * * * * * * * * * * * * * * * * * * * "),
- nl,write(" PROGRAMMING LANGUAGES "),nl,
- nl,write(" Answer questions only 'y' or 'n' "),nl,
- nl,write(" * * * * * * * * * * * * * * * * * * * "),
- nl,nl,do_consulting,
- nl, readchar(_), removewindow.
- do_consulting :-go([],"Language"),!.
- do_consulting :-nl, write("No results!"), clear.
- do_consulting.
- inpo(HISTORY,RNO,BNO,TEXT) :-
- write(TEXT," : "),
- readchar(RESPONSE),
- do_answer(HISTORY,RNO,TEXT,BNO,RESPONSE).
- /* Mechanism output */
- go(HISTORY, Mygoal) :-
- rule(RNO,Mygoal,NY,COND),
- check(RNO,HISTORY,COND),!,
- go([RNO|HISTORY],NY).
- go(_,Mygoal) :-
- not(rule(_,Mygoal,_,_)),!,
- nl,write("Your language: ",Mygoal), clear.
- check(RNO,HISTORY,[BNO|REST]) :-yes(BNO),!,check(RNO,HISTORY,REST).
- check(_,_,[BNO|_]) :- no(BNO),!,fail.
- check(RNO,HISTORY,[BNO|REST]) :-
- cond(BNO,TEXT),
- inpo(HISTORY,RNO,BNO,TEXT),
- check(RNO,HISTORY,REST).
- check(_,_,[]).
- do_answer(_,_,_,_, 27) :-exit.
- do_answer(_,_,_,BNO,'y') :-assert(yes(BNO)),write(y),nl.
- do_answer(_,_,_,BNO,'n') :-assert(no(BNO)),write(n),nl,fail.
- clear :-retract(yes(_)),retract(no(_)),fail,!.
- clear.
- /* Knowledge base */
- rule(1, "Language", "Web applications", [1]).
- rule(2, "Language", "Applications for phone", [2]).
- rule(3, "Language", "Desktop applications", [3]).
- rule(4, "Language", "Drivers", [4]).
- rule(5, "Language", "Expert systems", [5]).
- rule(6, "Web applications", "JavaScript", [6,7,8]).
- rule(7, "Web applications", "Ruby", [7,8]).
- cond(1, "Do you want to develop web applications?").
- cond(2, "Do you want to develop applications for phone?").
- cond(3, "Do you want to develop desktop applications?").
- cond(4, "Do you want to develop drivers?").
- cond(5, "Do you want to develop expert systems?").
- cond(6, "Do you want to work for yourself?").
- cond(7, "You are a creative person?").
- cond(8, "Are you willing to constantly learn something new?").
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д