📄 ex3.pro
字号:
/* Expert System Shell */
include"resort.pro"
predicates
inference(data_type,integer)
check_rule(integer,data_type,data_list,integer)
process_rule(integer,data_type,data_list,integer)
process_facts(integer,data_list,integer)
getresponse(integer)
get_first(data_list,data_type)
delete(data_type,data_list,data_list)
process(data_type)
rmv_rule(data_type,data_list,data_list)
check_ans(symbol,symbol)
check_fact(integer,data_type,integer)
mincf(integer,integer,integer)
start
database
fact1(data_type,integer)
clauses
process(Query):-
inference(Query,Cf),Cf>=20,
write("Your Question ",Query," has been proved Cf= ",Cf).
process(Query):-
write("Your question ",Query," can not be proved.").
inference(Query,100):-
not(rule(_, Query,_,_)).
inference(Query,Cf):-
check_rule(No,Query,Cond_list,Cf1),
get_first(Cond_list,Cond),
inference(Cond,Cf21),
process_rule(No,Cond,Cond_list,Cf22), !,
nl,write(Cf21),nl,write(Cf22),
mincf(Cf21,Cf22,Cf2),nl,write(Cf2),nl,
Cf=Cf1*Cf2/100,write(Cf),Cf>=20.
check_rule(No,Query,Cond_list,Cf):- !,
rule(No,Query,Cond_list,Cf).
process_rule(No,Query,Cond_list,Cf):-
rmv_rule(Query,Cond_list,N1),!,
process_facts(No,N1,Cf).
rmv_rule(Query,Cond_list,N1):-
rule(_, Query, _,_),
delete(Query,Cond_list,N1).
rmv_rule(_, Cond_list, Cond_list). /* only facts */
process_facts(_, [],100). /* no more facts left */
process_facts(Rno,Cond_list,Cf):-
get_first(Cond_list,Prop),
check_fact(Rno,Prop,Cf1),
delete(Prop,Cond_list,New_list),
process_facts(Rno,New_list,Cf2),
mincf(Cf1,Cf2,Cf).
check_fact(_,Fact,Cf):-
not(fact1(Fact,_)),!,
write(Fact),
getresponse(Cf),
assert(fact1(Fact,Cf)).
check_fact(_,Fact,Cf):-
fact1(Fact,Cf).
getresponse(R):-readint(Ask),
% check_ans(Ask,Rep),!,
R=ASK;
nl,write("Try another answer please"),nl,
getresponse(R).
check_ans(yes,y).
check_ans(y,y).
check_ans(n,n).
check_ans(no,n).
% validresponse(R,Y):-R=Y.
get_first([H|_],H).
delete(_,[],[]).
delete(H,[H|T],T):-!.
delete(Token,[H|T],[H|R]):-!,
delete(Token,T,R).
start:-
makewindow(1,2,3,"window 1 ",3,6,20,70),
retractall(fact1(_,_)),
consult("fact1.dba"),
write(" input data "),
readln(NAME),
process(is(Name,two_star)),
save("fact1.dba").
mincf(N1,N2,N2):-N1>N2,!.
mincf(N1,_,N1).
goal
start.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -