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.

I'm trying to run this expert system program but when I compile I get the following error.

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
false
  • 10,264
  • 13
  • 101
  • 209
daemon54
  • 1,057
  • 3
  • 16
  • 36

3 Answers3

1

Then you will need to convert the code to Prolog. Despite their names, TurboProlog/VisualProlog, although interesting logic programming languages, are not Prolog systems as per official and de facto standard definitions of Prolog.

Some of the changes to the code required for compiling it with a standard Prolog system (such as GNU Prolog) would include: removing the lines with the "clauses", and "goal" text"; also removing the "global facts" and "predicates" block; replacing double quotes in the arguments of write/1 by single quotes; replacing the call to readchar/1 with a call to get_char/1. But there are other not so trivial changes. In the end, better to look for tutorial code written for Prolog in the first place.

Paulo Moura
  • 18,373
  • 3
  • 23
  • 33
0

The code you posted seems to have been written for TurboProlog/VisualProlog. But, looking at the compilation errors messages, it seems that you're using a(nother) Prolog compiler. Can you confirm?

Paulo Moura
  • 18,373
  • 3
  • 23
  • 33
0

Please paste the readable code in your compiler and post your errors..

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(_).
Cling
  • 489
  • 1
  • 6
  • 15