prolog prosze o sprawdzenie kodu

0

Witam
Przepisałem ten kod z książki Mulawka, Systemy ekspertowe, chciałem odpalić w prologu ale cały czas wyskakuje mi błąd, proszę o rzucenie okiem na ten kod. Błąd jaki mi wyskakuje to:

zwierzeta.pl Syntax error: operator_expected
zwierzeta.pl Singleton variables: [X,Y]
zwierzeta.pl Full stop in cause-body? cannot redefine, /2

Z góry bardzo dziękuje za pomoc.

 /*modol 1*/

database
xpozytywne(symbol, symbol)
xnegatywne(symbol, symbol)

/*modol 2*/

predicates
zwierze_jest(symbol)
jest_to(symbol)
pytaj(symbol, symbol, symbol)
pamietaj(symbol, symbol,symbol)
pozytywne(symbol, symbol)
negatywne(symbol, symbol)
wyczysc_fakty
wykonaj

clauses

/*modol 3 nadanie cech zwierzat*/

zwierze_jest(gepard) :- jest_to(ssak),
jest_to(miesozerny),
pozytywne(ma, brunatny_kolor),
pozytywne(ma, ciemne_plamy).

zwierze_jest(tygrys) :- jest_to(ssak),
jest_to(miesozerny),
pozytywne(ma, brunatny_kolor),
pozytywne(ma, czarne_pasy).

zwierze_jest(zyrafa) :-jest_to(kopytonogi),
pozytywne(ma, dluga_szyja),
pozytywne(ma, dlugie_nogi),
pozytywne(ma, ciemne_plamy).

zwierze_jest(zebra) :- jest_to(kopytonogi),
pozytywne(ma,czarne_pasy).

zwierze_jest(strus) :- jest_to(ptak),
negatywne(czy, lata),
pozytywne(ma, dluga_szyja),
pozytywne(ma, dlugie_nogi),
pozytywne(ma, biale_i_czarne_kolory).

zwierze_jest(pingwin) :- jest_to(ptak),
negatywne(czy, lata),
pozytywne(czy, plywa),
pozytywne(ma,biale_i_czarne_kolory).

zwierze_jest(albatros) :- jest_to(ptak),
pozytywne(czy, lata_dobrze).

jest_to(ssak) :- pozytywne(ma, siersc).

jest_to(ssak) :- pozytywne(czy, daje_mleko).

jest_to(ptak) :- pozytywne(ma, piora).

jest_to(ptak) :- pozytywne(czy, lata),
pozytywne(czy,znosi_jajka).

jest_to(miesozerny) :- pozytywne(czy, je_mieso).

jest_to(miesozerny) :-
pozytywne(ma, ostre_zeby),
pozytywne(ma, pazury),
pozytywne(ma, wysuniere_do_przodu_oczy).

jest_to(kopytonogi) :-
jest_to(ssak), pozytywne(ma, kopyta).

jest_to(kopytonogi) :-
jest_to(ssak), pozytywne(czy, przezuwa_pokarm).

/*mofol 4 zapytanie*/

pozytywne(X,Y) :-
xpozytywne(X,Y), !.

pozytywne(X, Y) :-
not(xnegatywne(X,Y)),
pytaj(X,Y, tak).

negatywne(X,Y) :-
xnegatywne(X,Y),!.

negatywne(X, Y) :-
not(xpozytywne(X, Y)),
pytaj(X,Y, nie).

pytaj(X, Y, tak) :-
!, write(X, "to_zwierze ", Y," ?"," (t/n)", '\n').
readLn(Reply),
frontchar(Reply, 't', _),
pamietaj(X, Y, tak).

pytaj(X, Y, nie) :-
!, write(X, "to_zwierze ", Y," ?"," (t/n)", '\n'),
readLn(Reply),
frontchar(Reply, 'n', _),
pamietaj(X,Y, nie).

pamietaj(X, Y, tak) :- assertz(xpozytywne(X,Y)).

pamietaj(X, Y, nie) :- assertz(xnegatywne(X,Y)).

wyczysc_fakty :-
write("\n\nPrzycisnij spacje aby wyjsc\n"),
retractall(_ , dbasedom), readchar(_).

wykonaj :-
zwierze_jest(X), !,
write("\n Twoim zwierzeciem moze byc" , X),
nl, nl, wyczysc_fakty.

wykonaj :-
write("\nNie jestem w stanie odgadnac, "),
write("jakie zwierze masz na mysli. \n\n"), wyczysc_fakty.
0

'Singleton Variables' to ostrzeżenie. W simie możesz zignorować, ale lepiej zastąpić nazwy przez '_'.

Cała część "moduł1" i "moduł2" nie ma nic wspólnego z kodem prologa. Jesteś pewny że dobrze przepisałeś/że to był kod?

Ostatecznie w pytaj(X, Y, tak) po write masz kropkę zamiast przecinka.

Po tych zmianach kod jest poprawny składniowo, ale nie ma definicji takich predykatów jak np. xpozytywne (może w innym module z książki, nie wiem).

0

Witam
Dziękuje za odpowiedz.
Okazało się że to jest niejaki turbo Prolog. Ściągnąłem go z sieci i chciałem skompilować ten program, wszystko jest ok do czasu gdy dochodzi do linijki :
retractall(_ , dbasedom), readchar(_).

Coś mu się tam nie podoba. Chciałem zaznaczyć że to jedna z ostatnich linijek więc chyba reszta jest ok. Dziękuje za dotychczasową pomoc. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1