ProLog SWI-Prolog proźba o sprawdzenie błędu (wybór samochodu)

0

Witam proszę o pomoc. Próbuje skompilować kod ale niestety się wysypuje:


%trace
domains
    pr = price(real)
    clr = color(symbol)
    co = company(symbol)
    name = name(symbol)
    cls = class(symbol)

predicates
    data(name,co,clr,pr,cls)
    choice(integer)
    repeat

clauses

    repeat.
    repeat :-
        repeat.

    data(name(Van), company(maruti), color(White), price(265000), class(family)).
    data(name(fiat), company(fiat), color(white), price(200000), class(family)).
    data(name(Swift), company(maruti), color(Red), price(400000), class(family)).
    data(name(sumo), company(tata), color(white), price(300000), class(travel)).
    data(name(toyata), company(tata), color(black), price(800000), class(travel)).


    choice(1) :-
        write("Enter Company Name : "),
        readln(CO_NAME),

        data(name(Z),company(CO_NAME),_,_,_),
        nl, write(Z),
        fail.

    choice(2) :-
        write("Enter Car Name : "),
        readln(CAR_NAME),

        data(name(CAR_NAME),company(X),color(Y),price(Z),_),
        nl, write(CAR_NAME), nl, write(X), nl, write(Y), nl, write(Z),
        fail.

    choice(3) :-
        write("Enter the Price : "),
        readreal(PRCE),

        data(name(X),_,_,price(PRCE),_),
        nl, write(X),
        fail.

    choice(4) :-
        write("Enter the Class (travel/family) : "),
        readln(CL),

        data(name(X),company(Y),_,_,class(CL)),
        nl, write(X), write(' '), write(Y),
        fail.

    choice(5) :-
        write("Enter the Color : "),
        readln(CLR),

        data(name(X),_,color(CLR),_,_),
        nl, write(X),
        fail.

    choice(6) :-
        data(name(A),company(B),color(C),price(D),class(E)),
        nl, write(A), write(' '), write(B), write(' '),
        write(C), write(' '), write(D), write(' '), write(E),
        fail.

    choice(0) :- !.


    goal
        repeat,

        write("\n\n1. Search by Com Name"),
        write("\n2. Search by Car Name"),
        write("\n3. Search by Price"),
        write("\n4. Search by Class"),
        write("\n5. Search by Color"),
        write("\n6. Search all Cars"),
        write("\n0. Exit"),
        write("\n\nEnter your choice : "),
        readint(CH),
        choice(CH).

Podczas kompilacji wyskakuje ciągle:

samo.plSynax error: operator_expected
samo.pl'$record_clause'/2: No permission to modyfy static_procedure 'repeat/0'

Bardzo proszę o pomoc bo nie mam zielonego pojęcia o prologu i nic mi nie wychodzi.

Pozdrwiam

0

Nie mogę tego sprawdzić bo nie mam tego śmiesznego Turbo Prologa (bo używasz turbo prologa?), ale sądząc po nazwie to nie możesz redefiniować repeat/0.

Spróbuj zmienić

repeat.
repeat :- repeat.

Na np.

repeat1.
repeat1 :- repeat1.

Albo po prostu to wywalić (repeat chyba tak właśnie domyślnie działa).

0

Program jest napisany w Prologu, kompiluje go przy użyciu SWI-Prolog. Kod jest ściągnięty ze strony :

http://www.syntax-example.com/Code/prolog-search-car-company-name-car-3016.aspx

Starałem się poprawić to o czym wspominałeś w ostatniej odpowiedzi, ale niestety ciągle to samo wyskakuje.

Zależy mi by go odpalić bo wtedy mógłbym jakoś przerobić na moje potrzeby.

Tak w ogóle to muszę napisać program który pozwoli mi na wybór najlepszego samochodu na podstawie faktów podanych i pytań:

W jakiej cenie ma mieścić się samochód:??

Jakiej katalogi ma być to samochód ?? (van, kombi itd)

Jakie ma być maksymalne spalanie??

i parę innych pytań.

Może przypadkiem ma ktoś coś podobnego zakodowanego ?? Bardzo by mi się przydało.
Siedzę z książką o Prologu ale nadal jest to czarna magia.

Pozdrawiam

0

SWI prolog? Śmieszne, byłem przekonany że te dziwne nagłówki to domena Turbo Prologa. Chyba że to naprawdę domena turbo prologa a ty próbujesz go skompilować w SWI

Jak tylko wrócę do domu to skompiluje i sprawdzę co jest nie tak.

0

Sorry za powyższą, mylącą i nic nie wnoszącą w sumie wypowiedź ale się śpieszyłem...

Słusznie byłem przekonany (byłoby śmiesznie gdybym po kilkunastu projektów w prologu dowiedział się że nie wiem czegoś takiego)...

Turbo Prolog a.k.a. Visual Prolog to język może i ideologicznie podobny do Prologa, ale bardzo odchodzącym od klasycznego Prologa. Teraz trochę upadł razem z Borlandem który go wcześniej rozwijał.
kilka informacji -> http://en.wikipedia.org/wiki/Visual_Prolog

Jeśli zależy Ci na uruchomieniu polecam ściągnąć http://www.visual-prolog.com/ , nie powinno później być już żadnych problemów (chyba nie masz wymagania żeby użyć SWI?).

0

Dzięki za szybką odpowiedz. Mam zainstalowanego Visual Prologa i zrobiłem śmieszny programik przy pomocy . Potem w te miejsce gdzie jest ta linia kodu wrzuciłem ten kod z tego posta. Niestety nie zadziałał. Skasowałem wszystko z tego pliku i wrzuciłem sam kod ten co powyżej jest i wyskoczył błąd podczas kompilacji. main.pro(2.1) error c150 : Syntax error. Może MSI udało by ci się to jakoś skompilować i wrzucić plik żebym tylko go skompilował ??. Byłbym bardzo wdzięczny.

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