Prolog'ta "BLOCKS WORLD" problemini çözebilecek bir fonksiyon nasıl yazarım? solve(start_state, list_of_moves, goal_state) şeklinde iki argümanı verip üçüncü argümanı elde edebileceğim bir örnek verir misiniz? Örneğin: ?- solve([on(a,b),on(b,table),on(c,table)], X, [on(a,table), on(c,b), on(b,table)]).

AnonimKimliği gizli · 1 yıldan fazla önce

2 cevap

AnonimKimliği gizli · 1 yıldan fazla önceKabul edildi
solve(Start, Moves, Goal) :- depth_first(Start, Goal, [], Moves). depth_first(State, Goal, Visited, []) :- subset(Goal, State). depth_first(State, Goal, Visited, [Move|Rest]) :- move(State, Next, Move), \+ member(Next, Visited), depth_first(Next, Goal, [Next|Visited], Rest).
AnonimKimliği gizli · 1 yıldan fazla önce
• move([on(X,Y)|Rest], Rest, move(X,Y,table)) :- X \= table. • move(State, NewState, move(X,Y,Z)) :- select(on(X,Y), State, Temp), \+ member(on(_,X), State), NewState = [on(X,Z)|Temp]. solve(S, M, G) :- depth_first(S, G, [], M).
Cevap yaz