Prolog - jak wyrazić twierdzenie w postaci klauzuli

0

Cześć.
Mam zadanie do wykonania w języku Prolog. Otóż muszę zapisać poniższe twierdzenia w postaci klauzul, ale są pewne warunki:

  • mogę użyć tylko atomów: my_mouse i me
  • nie mogę używać funktorów.
  1. Konie lubią rośliny.
  2. Myszy lubią ser.
  3. Przyjaciele lubią się wzajemnie.
  4. Moja mysz jest moim przyjacielem.
  5. Moja mysz jada wszystko to, co lubi.
    Na koniec mam odpowiedziec na pytanie, co jada moja mysz. Jesli chodzi o brak atomow - mozna to obejsc uzycie zmiennych. Ale jak nie uzyc funktorow? Np lubi(X,Y) :- kon(X), roslina(Y). Czy zle rozumiem pojecie funktor?
    Prosze o pomoc, Dziekuję.
0

Ale jak nie uzyc funktorow? Np lubi(X,Y) :- kon(X), roslina(Y). Czy zle rozumiem pojecie funktor?

Możesz tego użyć, to predykaty. Funktor to by był np. kon(X) w predykacie lubi(kon(X), roslina(Y)) (to bezsensowny predykat btw ofc).

No i w takim razie sam napisałeś prekykat do pierwszego, więc wnioskuje że umiesz jednak zrobić zadanie.

mysz(my_mouse).
lubi1(X,Y) :- kon(X), roslina(Y)
lubi1(X, ser) :- mysz(X).  % wiem, ser nie jest na liście dozwolonych atomów. albo przeoczenie, albo jakiś dziwny predykat ser(X) można dodać
lubi1(X, Y) :- przyjaciel(X, Y).
lubi(X, Y) :- lubi1(X, Y) ; lubi1(Y, X).
przyjaciel(me, my_mouse).
je(my_mouse, X) :- lubi(my_mouse, X).

(pisane z pamięci, może nie być idealne)

0

Skąd masz tą definicje funktora? :)
Bo ja znalazłem w jakiejś nieoficjalnej dokumentacji, że lubi(w twoim przykładzie) to też funktor.
Polecenie nie pozwala użyć atomu ser, wiec pozostaje mi ser(X), mimo że mysz zje tylko mnie, na to by wychodziło :)

1

Funktor to "obiekt"/struktura danych (nieformalnie coś co można "przekazać w parametrze"), predykat to element syntaktyczny prologa.

Sprawę komplikuje trochę to że wyglądają w kodzie źródłowym prawie dokładnie tak samo (różnią się kontekstem).

Ciężko znaleźć faktycznie w internecie coś bezpośrednio o tym, ale przykładowo:
http://wiki.visual-prolog.com/index.php?title=Fundamental_Prolog_Part_2#Functors_and_Predicates
http://stackoverflow.com/questions/29093366/in-prolog-functors-vs-predicates-and-goals
http://stackoverflow.com/questions/15807506/prolog-functional-term-vs-predicate

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