📄 expert.pro
字号:
/* Expert System Shell */
include"resort.pro"
predicates
inference(data_type)
check_rule(integer,data_type,data_list)
process_rule(integer,data_type,data_list)
process_facts(integer,data_list)
getresponse(symbol)
validresponse(symbol,symbol)
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)
start
clauses
process(Query):-
inference(Query),
write("Your Question ",Query," has been proved.").
process(Query):-
write("Your question ",Query," can not be proved.").
inference(Query):-
not(rule(_, Query,_)).
inference(Query):-
check_rule(No,Query,Cond_list),
get_first(Cond_list,Cond),
inference(Cond),
process_rule(No,Cond,Cond_list), !.
check_rule(No,Query,Cond_list):- !,
rule(No,Query,Cond_list).
process_rule(No,Query,Cond_list):-
rmv_rule(Query,Cond_list,N1),!,
process_facts(No,N1).
rmv_rule(Query,Cond_list,N1):-
rule(_, Query, _),
delete(Query,Cond_list,N1).
rmv_rule(_, Cond_list, Cond_list). /* only facts */
process_facts(_, []). /* no more facts left */
process_facts(Rno,Cond_list):-
get_first(Cond_list,Prop),
check_fact(Rno,Prop),
delete(Prop,Cond_list,New_list),
process_facts(Rno,New_list).
check_fact(_,Fact):-
not(fact1(Fact)),!,
write(Fact),
getresponse(R),
R=y,
assert(fact1(Fact)).
check_fact(_,_).
getresponse(R):-readln(Ask),
check_ans(Ask,Rep),!,
R=Rep;
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:-
consult("fact1.dba"),
readln(NAME),
process(is(Name,two_star)),
save("fact1.dba").
goal
start.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -