Prolog - co robi ten kod?

Wątek przeniesiony 2020-05-02 03:23 z Ogłoszenia drobne przez flowCRANE.

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Witam,
potrzebuje pomocy odnosnie jezyka Prolog. Otoz nie wiem co robi nizej podany kod. Wiem, ze ma cos wspolnego z grafami, ale nie wiem co ten program dokladnie robi ani jak dziala. :/

Kopiuj
droga(b,a).
droga(a,b).
droga(c,b).
droga(a,c).

sciezka([]).
sciezka([_]).
sciezka([X,Y|Zs]):- droga(X,Y), sciezka([Y|Zs]).
sciezka(X,Y).

Prosze o pomoc.

p_agon
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 96-230
  • Postów: 952
1

Fakty, stwierdzenia opisujące właściwości obiektu lub relacje między obiektami:

Kopiuj
droga(b,a).
droga(a,b).
droga(c,b).
droga(a,c).

Pusta lista:

Kopiuj
([]).

Zmienna logiczna:

Kopiuj
[_]

Zasada, jeśli:

Kopiuj
:-
elwis
  • Rejestracja: dni
  • Ostatnio: dni
2

Pierwsze 4 line to definicje krawędzi grafu. Dalsza część zdaje się próbować implementować poszukiwanie ścieżki między dwoma punktami, ale chyba za bardzo nie działa. Mozna zrobić tak:

Kopiuj
| ?- sciezka(X).

X = [] ? ;

X = [_] ? ;

X = [b,a] ? ;

X = [b,a,b] ? ;

X = [b,a,b,a] ? 

#itd...

Nie mam pojęcia jak to uruchomić z powodzeniem. :) Po mojemu powinno być tak:

Kopiuj
sciezka(X,X,[X]).
sciezka(X,Y,[X,Y]) :- droga(X,Y).
sciezka(X,Z,[X|T]) :- droga(X,Y), sciezka(Y,Z,T).

wówczas:

Kopiuj
| ?- sciezka(c,a,X).

X = [c,b,a] ? 

yes
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

a czego w tym programie korzystamy z list? to jakos pomaga? jak mam zrozumiec ten kod tlumaczac go sobie na nasz jezyk?

sciezka(X,X,[X]).
sciezka(X,Y,[X,Y]) :- droga(X,Y).
sciezka(X,Z,[X|T]) :- droga(X,Y), sciezka(Y,Z,T).

czyli np w drugiej linijce: istnieje sciezka pomiedzy X i Y jesli X i Y sa polaczone krawedzia. trzeciej linijki nie rozumiem :/

elwis
  • Rejestracja: dni
  • Ostatnio: dni
2

Trzecia mówi, że X i Z są połączone jeśli istnieje takie Y, że jest jest krawędź X-Y, a Y i Z są połączone. Prosta rekurencja. Listy są po to, żeby program wypisał ci jaka ścieżka (jakie ścieżki) łączą dwa dane punkty.

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Dobra, pozwole sobie jeszcze na maly offtopic. Zamiescilem kolejnego posta z zadaniem, ktorego nie umiem rozwiazac, wiec licze na to ze pomozesz jakos. Musze w Prologu napisac program, ktory rozwiaza takie rownania:

y = 2x^2 - 5x - 9

y = -x^2 + 8x + 2

Masz jakis pomysl jak to zrobic?

koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0
p_agon napisał(a):

Zmienna logiczna:

Kopiuj
[_]

@p_agon: Jak to zmienna logiczna??

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.