zadanie Prolog

0

Podaj określenie programu w Prologu oraz przedstaw w Prologu następujące związki:
a) Jan lubi Marię i czekoladę.
b) Piotr lubi wino.
c) Dwie osoby się lubią, jeżeli mają to samo hobby

Napisałem:

lubi(osoba(jan), osoba(maria)).
lubi(osoba(jan), rzecz(czekolada)).
lubi(osoba(piotr), rzecz(wino)).



lubi(osoba(X), osoba(Y)):-
			hobby(osoba(X), rzecz(Z)),
			hobby(osoba(Y), rzecz(Z)).

Błąd który wyskakuje w prologu:

Warning: The predicates below are not defined. If these are defined
Warning: at runtime using assert/1, use :- dynamic Name/Arity.
Warning: 
Warning: hobby/2, which is referenced by
Warning:        c:/users/robert/desktop/zadanie2.pl:8:24: 4-th clause of lubi/2
Warning:        c:/users/robert/desktop/zadanie2.pl:9:24: 4-th clause of lubi/2

Co trzeba zrobić, prosze o pomoc dopiero zaczynam uczyc się prologa

2

W regule lubi używasz reguły hobby, a nigdzie nie masz jej wcześniej zdefiniowanej. Poza tym to nie błąd, tylko ostrzeżenie.

Dla mnie hobby i lubienie czekolady to co innego, więc raczej bym powiedział coś takiego:

hobby(osoba(jan), wedkarstwo).
hobby(osoba(piotr), piwowarstwo).

% i dopiero:

lubi(osoba(X), osoba(Y)) :- hobby(osoba(X), Z), hobby(osoba(Y), Z). 
% reguła lubi(osoba(X), osoba(Y)) jest prawdą, jeżeli obie osoby łączy jakieś Z, które jest wewnątrz termu hobby
0

Musiałem zdefiniować predykaty: osoba/1, rzecz/1, hobby/2, lubi/2predykaty: osoba/1, rzecz/1, hobby/2, lubi/2
dlatego jako rzecz przyjmuje czekolade i turystyke/teatr.

Jesli dobrze zrozumialem, po prostu nie dokonczylem zadania do konca i dlatego cos mi nie wychodzilo.

Wszystkie podpunkty:
a) Jan lubi Marię i czekoladę.
b) Piotr lubi wino.
c) Dwie osoby się lubią, jeżeli mają to samo hobby.
d) Turystyka, to hobby Jana i Heleny, a teatr – Tomasza i Piotra.
e) Ewa lubi te same rzeczy co Jan oraz osoby, które mają jakieś hobby

Teraz mam napisane:

lubi(osoba(jan), osoba(maria)).
lubi(osoba(jan), rzecz(czekolada)).
lubi(osoba(piotr), rzecz(wino)).
hooby(osoba(jan), rzecz(turystyka)).
hobby(osoba(helena), rzecz(turystyka)).
hobby(osoba(tomasz), rzecz(teatr)).
hobby(osoba(piotr), rzecz(teatr)).


lubi(osoba(X), osoba(Y)):-
			hobby(osoba(X), rzecz(Z)),
			hobby(osoba(Y), rzecz(Z)).

lubi(osoba(ewa), rzecz(X)):-
			lubi(osoba(jan), rzecz(X)),
			lubi(osoba(Y), hobby(osoba(Y), rzecz(_)).

Czy teraz wygląda to poprawnie?
Dalej mam ostrzeżenia:

Warning: c:/users/robert/desktop/zadanie2.pl:10:
Warning:    Clauses of lubi/2 are not together in the source-file
Warning:    Earlier definition at c:/users/robert/desktop/zadanie2.pl:1
Warning:    Current predicate: hobby/2
Warning:    Use :- discontiguous lubi/2. to suppress this message
ERROR: c:/users/robert/desktop/zadanie2.pl:16:56: Syntax error: Operator expected

Co tym razem jest nie tak:/?

0

Jeszcze miałem odpowiedzieć na pytania, jeśli ktoś mógłby sprawdzić czy odpowiedziałem poprawnie byłoby super:

%a) ile definicji predykatów zawiera program z punktu a), jakie to są predykaty i ile mają argumentów,

% 2 definicje: jan lubi marię i jan lubi czekoladę

%b) ile klauzul zawiera każda definicja

% 1kaluzula=1definicja(fakt lub reguła)

%c) ile klauzul występuje w napisanym programie

% 9

%d) które klauzule są faktami, a które regułami

% fakty: pierwsze 7
% reguły : ostatnie 2

%e) w przypadku reguł podaj głowę i predykaty stanowiące ciało reguły.

% głowa: lubi(osoba(X),osoba(Y))
% ciało reguły: hobby(osoba(X), rzecz(Z)), hobby(osoba(Y), rzecz(Z))

% reguła 2
% głowa: lubi(osoba(ewa), rzecz(X))
% ciało reguły: lubi(osoba(jan), rzecz(X)), lubi(osoba(Y), hobby(osoba(Y), rzecz(_))

1

Czy teraz wygląda to poprawnie?
Dalej mam ostrzeżenia:
Warning: c:/users/robert/desktop/zadanie2.pl
Warning: Clauses of lubi/2 are not together in the source-file
Warning: Earlier definition at c:/users/robert/desktop/zadanie2.pl:1

Klauzule tego samego rodzaju (np. lubi/2) powinny być jedna pod drugą w pliku. Jeżeli masz przemieszane z innymi rodzajami to czasami efekty twoich pytań mogą być nie do końca takie jak oczekujesz.

ERROR: c:/users/robert/desktop/zadanie2.pl56: Syntax error: Operator expected

Sprawdź, czy masz dobrze nawiasy pozamykane.

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