dfs(X, [X]) :- goal(X). dfs(X, [X | L]) :- successor(X,S),dfs(S, L). goal([0,0,0]). successor([3,3,1], [3,1,0]). successor([3,1,0], [3,2,1]). successor([3,2,1], [3,0,0]). successor([3,0,0], [3,1,1]). successor([3,1,1], [1,1,0]). successor([1,1,0], [2,2,1]). successor([2,2,1], [0,2,0]). successor([0,2,0], [0,3,1]). successor([0,3,1], [0,1,0]). successor([0,2,0], [0,3,1]). successor([0,3,1], [0,1,0]). successor([0,1,0], [0,2,1]). successor([0,2,1], [0,0,0]). printlist([]). printlist([X|Y]) :- write(X), nl, printlist(Y). % the query is % ?- dfs([3,3,1], X), printlist(X).