Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
box(a). box(b). box(c). on(a,t). on(b,t). on(c,a). final(a,b). final(b,c). final(c,t). start(State) :- findall(on(X,Y), on(X,Y), State). final(State) :- findall(on(X,Y), final(X,Y), FinalState), same_state(State, FinalState). same_state(State1, State2) :- sort(State1, State), sort(State2, State). free(X, State) :- box(X), \+ member(on(_,X), State). free(t, _). move(State0, move(X,New), [on(X,New)|Rest]) :- select(on(X,_), State0, Rest), free(X, State0), free(New, State0), X \== New. moves(State, [], _Visited, State). moves(State0, [Move|T], Visited, State) :- move(State0, Move, State1), \+ ( member(V, Visited), same_state(State1, V) ), moves(State1, T, [State1|Visited], State). solve(Moves) :- start(State), moves(State, Moves, [State], Final), final(Final). /** <examples> ?- solve(Moves). */