/*
solve_dfs(State,History,Moves) :-
Moves is the sequence of moves to reach a desired final state
from the current State, where History contains the states
visited previously.
*/
:- op(900,fy,not).
solve_dfs(State,History,[]) :-
final_state(State).
solve_dfs(State,History,[Move|Moves]) :-
move(State,Move),
update(State,Move,State1),
legal(State1),
not member(State1,History),
solve_dfs(State1,[State1|History],Moves).
/* Testing the framework */
test_dfs(Problem,Moves) :-
initial_state(Problem,State), solve_dfs(State,[State],Moves).
% Program 20.1 A depth-first state-transition framework for problem solving