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

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

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

Необходимо улучшить экспертную систему, необходимо добавить счетчик результатов, и начинаться опрос должен именно с самого популярного результата. Т.е. если по результатам опроса чаще всего выпадает Ruby, то каждый новый опрос должен начинаться с него. Нужна помощь. Если эта не очень простая задача, кто может реализовать отпишитесь, мб договоримся.

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

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?").

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


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

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

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