"BLOCKS WORLD" problemini Prolog'ta çözmek üzere solve/3 predikatını nasıl tanımlamalıyım? İki argüman (başlangıç ve hedef durum) verildiğinde üçüncü argüman olarak hareket listesini elde etmek istiyorum. Örnek kullanım: ?- 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

1 cevap

AnonimKimliği gizli · 1 yıldan fazla önce
solve(Start,Goal,Moves) :- bfs([[Start,[]]],Goal,Moves). bfs([[State,Path]|_],Goal,Moves) :- subset(Goal,State), reverse(Path,Moves). bfs([[State,Path]|Rest],Goal,Moves) :- move(State,Next), \+ member(Next,Path), bfs([[Next,[move(State,Next)|Path]]|Rest],Goal,Moves).
Cevap yaz