Datalog

0

Mam zadanie do rozwiązania w datalogu, to jego treść:

Dane są fakty postaci rodzic(Rodzic, Dziecko), mezczyzna(X), kobieta(X). Napisz program, który znajdzie wszystkich wujów wuj(Wuj, X) oraz wszystkie ciotki ciotka(Ciotka, X).

Fakty:

rodzic(tomek,jan).
rodzic(tomek,ola).
rodzic(jan,ania).
rodzic(ola,arek).

mezczyzna(tomek).
mezczyzna(jan).
kobieta(ola).
kobieta(ania).
mezczyzna(arek).

Moje rozwiązanie to:

wuj(Z,Y) :-rodzic(A,Z),rodzic(A,W),rodzic(Z,X), rodzic(W,Y),mezczyzna(Z),!=(Z,W).
ciotka(Z,Y) :-rodzic(A,Z),rodzic(A,W),rodzic(Z,X), rodzic(W,Y),kobieta(Z),!=(Z,W).

Niestety mam gdzieś tu błąd ponieważ nie przechodzi to rozwiązanie wszystkich testów, proszę o pomoc.

0

Nie znam dokładnie Dataloga, ale w SWI Prologu ja bym to zapisał tak:

rodzenstwo(X, Y) :- rodzic(A, X), rodzic(A, Y), X \= Y, !.
dziadek(X, Y) :- rodzic(X, A), rodzic(A, Y), !.
wuj(X, Y) :- rodzic(A, Y), rodzenstwo(X, A), mezczyzna(X).
ciotka(X, Y) :- rodzic(A, Y), rodzenstwo(X, A), kobieta(X).
0

Ogólnie do rozwiązania tego zadania potrzebne jest to co mamy w treści i ewentualnie to że nie są sobie równe, czyli nie potrzebujemy tego że są rodzeństwem albo tego że ktoś jest dziadkiem. Ogólnie moje rozwiązanie wyświetla poprawny wynik, ale gdzieś jest mały błąd, albo czegoś nie dopisałem i to sprawia, ze pomimo dobrego wyniku jeden test jest negatywny.

0

Ok, nie potrzebujesz tego, że są rodzeństwem, ale dzięki temu łatwiej jest zrozumieć kod, który piszesz. Ciężko jest u ciebie się połapać co się dzieje, natomiast u mnie jest to zdecydowanie łatwiejsze. Dokładniej u ciebie to brzmi: "wujem jest osoba, której rodzic mojego rodzica jest współdzielony i jest mężczyzną", u mnie jest to "wujem jest męskie rodzeństwo mojego rodzica". Można by to jeszcze lepiej opisać:

rodzenstwo(X, Y) :- rodzic(A, X), rodzic(A, Y), X \= Y, !.
brat(X, Y) :- rodzenstwo(X, Y), mezczyzna(X).
siostra(X, Y) :- rdzenstwo(X, Y), siostra(X).
wuj(X, Y) :- rodzic(A, Y), brat(A, X).
ciotka(X, Y) :- rodzic(A, Y), siostra(X, A).

Gdzie jeszcze czytelniej jest to zaznaczone:

  • wuj to brat rodzica
  • ciotka to siostra rodzica

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