⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex6.pro

📁 prolog,人工智能推理程序,运行环境prolog
💻 PRO
字号:

/* Expert System Shell */

include"resort.pro"
predicates
      inference(data_type,integer)
      getresponse(integer)
      get_first(data_list,data_type,data_list)
      process(data_type)
      infer(data_type,integer)
      inferlist(data_list,integer)
      list_maximum(integer,intelist)
      list_max(integer,integer,intelist)
      empty(intelist)
      mincf(integer,integer,integer)
      start
      wl(intelist)
      
database
      fact1(data_type,integer)
      
clauses 

      process(Query):-
          infer(Query,Cf),
          write("Your Question ",Query," has been proved Cf= ",Cf).
      process(Query):-
          write("Your question ",Query," can not be proved.").

      infer(Query,Cf1):-
          findall(Cf,inference(Query,Cf),L),!,
          not(empty(L)),
          list_maximum(Cf1,L),
          Cf1>=20.

      inference(Query,Cf):-
          fact1(Query,Cf),!.
      inference(Query,Cf):-
          not(rule(_,Query,_,_)),!,
          write(Query),
          getresponse(Cf),
          assert(fact1(Query,Cf)).
      inference(Query,Cf):-
          rule(_,Query,Cond_list,Cf1),
          inferlist(Cond_list,Cf2),
          Cf=Cf1*Cf2/100,Cf>=20.
                    

      inferlist([],100):-!.  
      inferlist(Cond_list,Cf):-
          get_first(Cond_list,Cond,New_list),
          findall(Cf1,inference(Cond,Cf1),L),!,
          wl(L),
          list_maximum(Cf1,L),
          write(Cf1),nl,
          Cf1>=20,
          inferlist(New_list,Cf2),
          mincf(Cf1,Cf2,Cf).

      getresponse(R):-
          readint(Ask),
          Ask>=0,Ask<=100,
          !,R=ASK;
          nl,write("Try another answer please"),nl,
          getresponse(R).
       
      get_first([H|T],H,T).

      list_maximum(Max,[H|T]):-
          list_max(Max,H,T).
            
      list_max(S,S,[]).
      list_max(Max,S,[H|T]):-
           H>=S,list_max(Max,H,T).
      list_max(Max,S,[H|T]):-
           H<=S,list_max(Max,S,T).
             
      empty([]).
       
      mincf(N1,N2,N2):-N1>N2,!.
      mincf(N1,_,N1).       
   
      wl([]):-!,nl.
      wl([H|T]):-write(H," "),wl(T).
      
      
      start:-                   
            makewindow(1,2,3," Expert System ",3,6,20,70),
            retractall(fact1(_,_)),
            consult("fact1.dba"),
            write(" What is your query ? "),
            readln(NAME), 
            process(is(Name,two_star)),   
            save("fact1.dba").

  goal
       start.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -