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

Prolog - co robi ten kod?

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. :/

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.

1

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

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

Pusta lista:

([]).

Zmienna logiczna:

[_]

Zasada, jeśli:

:-
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:

| ?- 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:

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:

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

X = [c,b,a] ? 

yes
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 :/

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.

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?

0
p_agon napisał(a):

Zmienna logiczna:

[_]

@p_agon: Jak to zmienna logiczna??

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