6

I'm doing this expert system for classification animals using prolog and I'm using GNU/Prolog and 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. 

I have a problem with this program. I compile the program, but I get an error message:

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 

I'm trying to solve my problem, but I'm still getting the error message:

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 

Error message:

| ?- [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 

Thank you for your help in advance

1
  • 1
    are you missing . (a dot) after some of your lines? Commented Dec 20, 2012 at 16:49

1 Answer 1

7

You are using source from WinProlog (was TurboProlog).

Simply drop all those declarations, i.e. those lines without ending dot (up to run, included). Are not required in Prolog.

You will also need to rename write calls, or, for simplicity, add squared brackets around arguments, to make them of arity 1. For instance:

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

Then you'll call

?- run. 

on console.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.