2012-03-05 33 views
0
global facts 
    xpositive(symbol,symbol) 
    xnegative(symbol,symbol) 

predicates 
    animal_is(symbol) - nondeterm (o) 
    it_is(symbol) - nondeterm (i) 
    ask(symbol,symbol,symbol) - determ (i,i,i) 
    remember(symbol,symbol,symbol) - determ (i,i,i) 
    positive(symbol,symbol) - determ (i,i) 
    negative(symbol,symbol) - determ (i,i) 
    clear_facts - determ() 
    run - determ() 

clauses 
    animal_is(cheetah):- 
it_is(mammal), 
    it_is(carnivore), 
positive(has,tawny_color), 
positive(has,dark_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). 

    animal_is(zebra):- 
it_is(ungulate), 
positive(has,black_stripes). 

    animal_is(ostrich):- 
it_is(bird), 
negative(does,fly), 
positive(has,long_neck), 
positive(has,long_legs), 
positive(has, black_and_white_color). 

    animal_is(penguin):- 
it_is(bird), 
negative(does,fly), 
positive(does,swim), 
positive(has,black_and_white_color). 

    animal_is(albatross):- 
it_is(bird),positive(does,fly_well). 

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

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

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

    ask(X,Y,yes):- 
!, 
write(X," it ",Y,'\n'), 
readln(Reply),nl, 
frontchar(Reply,'y',_), 
remember(X,Y,yes). 
    ask(X,Y,no):- 
!, 
write(X," it ",Y,'\n'), 
readln(Reply),nl, 
frontchar(Reply,'n',_), 
remember(X,Y,no). 

    remember(X,Y,yes):- 
assertz(xpositive(X,Y)). 
    remember(X,Y,no):- 
assertz(xnegative(X,Y)). 

    clear_facts:- 
write("\n\nPlease press the space bar to exit\n"), 
retractall(_,dbasedom), 
readchar(_). 

    run:- 
animal_is(X),!, 
write("\nYour animal may be a (an) ",X), 
nl, 
clear_facts. 
    run:- 
write("\nUnable to determine what"), 
write("your animal is.\n\n"), 
clear_facts. 

goal 
    run. 

我試圖運行這個專家系統程序,但是當我編譯時出現以下錯誤。通過prolog程序獲取錯誤

compiling C:/Users/daemon/Desktop/ch16E01.PRO for byte code... 
C:/Users/daemon/Desktop/ch16E01.PRO:1:8: syntax error: . or operator expected after  expression 
C:/Users/daemon/Desktop/ch16E01.PRO:127:3: syntax error: . or operator expected after  expression 
2 error(s) 
compilation failed 

回答

1

然後您需要將代碼轉換爲Prolog。儘管有他們的名字,TurboProlog/VisualProlog雖然有趣的邏輯編程語言,但並不像Prolog的官方和事實標準定義那樣是Prolog系統。

編譯標準Prolog系統(如GNU Prolog)所需的一些代碼更改包括:刪除包含「子句」和「目標文本」的行;也刪除「全局事實「和」謂詞「塊;使用單引號替換write/1參數中的雙引號;用調用get_char/1替換對readchar/1的調用,但還有其他不太重要的更改,更好地尋找在首位的Prolog寫的教程代碼。

0

您發佈的代碼似乎是爲TurboProlog/VisualProlog編寫的。但是,看着編譯錯誤消息,看起來你正在使用(nother)Prolog編譯器。你可否確認?

+0

哦是的,我實際上是在嘗試使用GNU編譯器。 – daemon54 2012-03-06 06:25:48

0

請粘貼可讀的代碼在你的編譯器,並發表您的錯誤..

DATABASE - dbasedom 
    xpositive(symbol,symbol) 
    xnegative(symbol,symbol) 

PREDICATES 
    animal_is(symbol) - nondeterm (o) 
    it_is(symbol) - nondeterm (i) 
    ask(symbol,symbol,symbol) - determ (i,i,i) 
    remember(symbol,symbol,symbol) - determ (i,i,i) 
    positive(symbol,symbol) - determ (i,i) 
    negative(symbol,symbol) - determ (i,i) 
    clear_facts - determ() 
    run - determ() 


Goal 
run. 


CLAUSES 


run:- 
animal_is(X),!, 
write("\nYour animal may be a (an) ",X), 
nl, 
clear_facts. 

run:- 
write("\nUnable to determine what"), 
write("your animal is.\n\n"), 
clear_facts. 



animal_is(cheetah):- 
it_is(mammal), 
it_is(carnivore), 
positive(has,tawny_color), 
positive(has,dark_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). 

animal_is(zebra):- 
it_is(ungulate), 
positive(has,black_stripes). 

animal_is(ostrich):- 
it_is(bird), 
negative(does,fly), 
positive(has,long_neck), 
positive(has,long_legs), 
positive(has, black_and_white_color). 

animal_is(penguin):- 
it_is(bird), 



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


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

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


ask(X,Y,yes):- 
!, 
write(X," it ",Y,'\n'), 
readln(Reply),nl, 
frontchar(Reply,'y',_), 
remember(X,Y,yes). 

ask(X,Y,no):- 
!, 
write(X," it ",Y,'\n'), 
readln(Reply),nl, 
frontchar(Reply,'n',_), 
remember(X,Y,no). 

remember(X,Y,yes):- 
assertz(xpositive(X,Y)). 
remember(X,Y,no):- 
assertz(xnegative(X,Y)). 


negative(does,fly), 
positive(does,swim), 
positive(has,black_and_white_color). 


clear_facts:- 
write("\n\nPlease press the space bar to exit\n"), 
retractall(_,dbasedom), 
readchar(_).