2012-12-20 58 views
4

我正在爲使用prolog的分類動物製作專家系統,並使用GNU/Prolog和Debian GNU/Linux。序言中的小型專家系統

xpositive(symbol,symbol) 
xnegative(symbol,symbol) 

nondeterm animal_is(symbol) 
nondeterm it_is(symbol) 
ask(symbol,symbol,symbol) 
remember(symbol,symbol,symbol) 
positive(symbol,symbol) 
negative(symbol,symbol) 
clear_facts 
run 

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,nl,clear_facts. 
run:- 
    write("\nUnable to determine what"), 
    write("your animal is.\n\n"), 
    clear_facts. 

run. 

我有這個程序的問題。我編譯程序,但我得到一個錯誤信息:

GNU Prolog 1.3.0 
By Daniel Diaz 
Copyright (C) 1999-2007 Daniel Diaz 
| ?- [system]. 
compiling /root/Dokumenty/Lab/Expert/system.pl for byte code... 
/root/Dokumenty/Lab/Expert/system.pl:2:1: syntax error: . or operator expected after > expression 
     1 error(s) 
compilation failed 

我試圖解決我的問題,但我仍然得到錯誤信息:

xpositive(symbol,symbol). 
xnegative(symbol,symbol). 

nondeterm animal_is(symbol) 
nondeterm it_is(symbol) 
ask(symbol,symbol,symbol) 
remember(symbol,symbol,symbol) 
positive(symbol,symbol) 
negative(symbol,symbol) 
clear_facts 
run 

錯誤消息:

| ?- [system]. 
compiling /root/Dokumenty/Lab/Expert/system.pl for byte code... 
/root/Dokumenty/Lab/Expert/system.pl:4:11: syntax error: . or operator expected after expression 
    1 error(s) 
compilation failed 

感謝您的幫助提前

+1

你是否缺少。 (點)後你的一些線? –

回答

4

您正在使用從WinProlog源(是TurboProlog)。

簡單地刪除所有這些聲明,即那些沒有結束點的行(包括運行)。在Prolog中不需要。

您還需要重命名寫入調用,或爲簡單起見,周圍添加參數方括號,使它們元數1.例如:

... 
write([X," it ",Y,'\n']), 
... 

然後你會打電話給

?- run. 

在控制檯上。