2016-12-05 48 views
1
xpositive(symbol,symbol). 
xnegative(symbol,symbol). 
run:-animal_is(X), !,write("\nYour animal may be a"),write(X),nl, nl, clear_facts. 
run:-write("\nUnable to determine what"),clear_facts. 
positive(X,Y):-write("\npositive(X,Y)0\n"),xpositive(X, Y), ! . 
positive(X,Y):-write("\npositive(X,Y)1\n"),not(xnegative(X, Y)),ask(X, Y). 
negative(X,Y):-write("\nnegative(X,Y)0\n"),xnegative(X, Y), !. 
negative(X,Y):-write("\nnegative(X,Y)1\n"),not(xpositive(X, Y)),ask(X, Y). 
ask(X,Y):-write("\nask \n"),write(X),write(" it "),write(Y),readln(R),write("\n0000000000000\n"),new_rules(X,Y,R). 
new_rules(X, Y, y):-write("\n01111111111110\n"),assert(xpositive(X, Y)). 
new_rules(X, Y, n):-write("\n02222222222220\n"),assert(xnegative(X, Y)), fail. 
clear_facts:-retract(xpositive(_,_)) , fail. 
clear_facts:-retract(xnegative(_,_)), fail. 
clear_facts:-write("\nExit\n"). 
it_is(mammal):-write("\nit_is(mammal)0\n"),positive(has, hair). 
it_is(mammal):-write("\nit_is(mammal)1\n"),positive(does, give_milk). 
it_is(bird):-positive(has, feathers). 
it_is(bird):-positive(does, fly),positive(does, lay_eggs). 
it_is(carnivore):-positive(does, eat_meat). 
it_is(carnivore):-positive(has, pointed_teeth),positive(has, claws),positive(has, forward_eyes). 
it_is(ungulate):-it_is(mammal),positive(has, hooves). 
it_is(ungulate):-it_is(mammal),positive(does, chew_cud). 
animal_is(cheetah):-it_is(mammal) , it_is(carnivore),positive(has, tawny_color),positive(has, black_spots). 
animal_is(tiger) :-it_is(mammal),it_is(carnivore) , positive(has, tawny_color) , positive(has,black_stripes). 
animal_is(giraffe):- it_is(ungulate) ,positive(has, long_neck) , positive(has, long_legs),positive(has, dark-_spots) . 

以上是我的序言碼(從網上下載),這些行:專家系統使用序言和有一個預測,就決不會滿意

ask(X,Y):-write("\nask \n"),write(X),write(" it "),write(Y),readln(R),write("\n0000000000000\n"),new_rules(X,Y,R). 

new_rules(X, Y, y):-write("\n01111111111110\n"),assert(xpositive(X, Y)). 

new_rules(X, Y, n):-write("\n02222222222220\n"),assert(xnegative(X, Y)), fail. 

手段來詢問用戶的問題,然後向系統中提出新的事實。但是由於「011111110」或「02222220」無法打印到屏幕上,因此無法滿足預測「new_rules」,因此係統無法使用答案!我只是不知道爲什麼!!非常感謝您的所有建議!!!!!!

回答

0

我不完全確定你的程序應該如何處理所有這些0,1和2,所以在回答你的建議請求時,這裏是SWI-Prolog程序的工作版本(它也是有助於指定您正在使用的prolog版本)。

-RdR(PS。如果你喜歡的答案,不要忘記給予好評)

:- dynamic xpositive/2, xnegative/2. 

run:- write("\nAnalyse your animal...\n"), 
     clear_facts, 
     animal_is(X), 
     write("\nYour animal may be a "), 
     writeln(X),nl. 
run:- write("\nUnable to determine more\n"). 

clear_facts:-retractall(xpositive(_,_)), retractall(xnegative(_,_)). 


positive(X,Y):-xpositive(X, Y), ! . 
positive(X,Y):-not(xnegative(X, Y)),ask(X, Y). 
negative(X,Y):-xnegative(X, Y), !. 
negative(X,Y):-not(xpositive(X, Y)),ask(X, Y). 

ask(X,Y):- 
    format("~n~w it ~w (y/n)? ",[X,Y]), 
    get_single_char(Ch), 
    char_code(C,Ch), 
    new_rule(X,Y,C). 

new_rule(X, Y, 'y'):-assert(xpositive(X, Y)),!. 
new_rule(X, Y, 'n'):-assert(xnegative(X, Y)),!,fail. 


it_is(mammal):-positive(has, hair). 
it_is(mammal):-positive(does, give_milk). 
it_is(bird):-positive(has, feathers). 
it_is(bird):-positive(does, fly),positive(does, lay_eggs). 
it_is(carnivore):-positive(does, eat_meat). 
it_is(carnivore):-positive(has, pointed_teeth), 
    positive(has, claws),positive(has, forward_eyes). 
it_is(ungulate):-it_is(mammal),positive(has, hooves). 
it_is(ungulate):-it_is(mammal),positive(does, chew_cud). 

animal_is(cheetah):-it_is(mammal) , it_is(carnivore), 
    positive(has, tawny_color),positive(has, black_spots). 
animal_is(tiger) :-it_is(mammal),it_is(carnivore) , 
    positive(has, tawny_color) , positive(has,black_stripes). 
animal_is(giraffe):- it_is(ungulate) ,positive(has, long_neck), 
    positive(has, long_legs),positive(has, dark_spots).