Proste zadanie z Prologa

0

Mam takie zadanie, gdzie jest podana baza wiedzy:

lubi(patryk, jedzenie). lubi(patryk, sport).
lubi(ewa, gry). lubi(ewa, telewizja).
lubi(oliwia, gry). lubi(lukasz, jedzenie).
lubi(lukasz, gry). lubi(lukasz, sport).

Trzeba napisac regule, ktora sprawdzi czy sa trzy osoby, ktore lubia to samo. Niestety nie mam pojecia jak sie za to zabrac.

1

Predykat lubi3 jest spełniony jeśli lubi(X, Y), lubi(Z,Y), lubi (V, Y) oraz X, Z i V nie są unifikowalne, a tak po ludzku to są różne. Trzeba to zdanie przetłumaczyć na Prologa i tak naprawdę różni się jedynie składnią, bo semantyka jest dokładnie taka.

0

lubi3(X):-
lubi(X,Y), lubi(Z,Y), lubi(V,Y).

Cos takiego zrobilem, ale nie dziala :/

2

Po pierwsze lubi3(). Po drugie prawie dobrze, jeszcze musisz parami porównać X, Z i V, np. X \= Z.

0

Poprawilem, ale nie chce dzialac. Jest blad, ktory mowi, ze np. "patryk/0" nie jest funkcja.

lubi3():-
    lubi(X,Y), lubi(Z,Y), lubi(V,Y), X=\=Z, X=\=V, V=\=Z.
2

Bo wymyśliłeś ulepa =\= zamiast \=. Sprawdziłem, lubi3. jest prawdą.

0

Teraz dziala, dzieki :D

0

A tak przy okazji pomoglbys jeszcze z jednym zadaniem?

Mam liste faktow (tak jak w zadaniu powyzej):

cyfra(0). cyfra(1).cyfra(2). cyfra(3). cyfra(4).cyfra(5).
cyfra(6). cyfra(7). cyfra(8). cyfra(9).

Musze stworzyc regule, ktore sprawdzi czy liczba, ktora podam jako argument bedzie jednocyfrowa czy dwucyfrowa.

1

Nie jestem prologowym specjalista, szedlbym raczej w stronę zamiane argumentu na string, z stringa na listę, zamiane elementów znów na atomy i sprawdzenia czy każdy atom z listy jest cyfrą.

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