2012-12-20 1 views
4

Je fais ce système expert pour les animaux de classification en utilisant prolog et j'utilise GNU/Prolog et Debian GNU/Linux.Petit système expert en prologue

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. 

J'ai un problème avec ce programme. Je compile le programme, mais je reçois un message d'erreur:

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 

J'essaie de résoudre mon problème, mais je reçois toujours le message d'erreur:

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 

Message d'erreur:

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

Merci pour votre aide à l'avance

+1

avez-vous manqué. (un point) après certaines de vos lignes? –

Répondre

4

vous utilisez la source de WinProlog (était TurboProlog). Il suffit de supprimer toutes ces déclarations, c'est-à-dire ces lignes sans point de fin (jusqu'à l'exécution, inclus). Ne sont pas requis dans Prolog.

Vous devrez également renommer les appels d'écriture, ou, pour simplifier, ajouter entre crochets autour des arguments, pour les rendre d'arité 1. Par exemple:

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

Ensuite, vous appelez

?- run. 

sur la console.