/* Programming example: Towers of Hanoi */ hanoi(N) :- move(N,left,centre,right). /* Number of discs, source disc, distination disc, spare disc */ move(0,_,_,_) :- !. move(N,A,B,C) :- M is N-1, move(M,A,C,B), inform(A,B), move(M,C,B,A). inform(X,Y) :- write(X),write('->'),write(Y),nl. /* Test run: | ?- hanoi(3). left->centre left->right centre->right left->centre right->left right->centre left->centre */ /* Programming example: DFS graph search */ /* True if we can go from X to Y. T is list of vertices visited already */ dfsSearch(Source,Destination) :- dfs(Source,Destination,[Source]). dfs(X,X,T). dfs(X,Y,T) :- edge(X,Z), \+member(Z,T), dfs(Z,Y,[Z|T]). edge(a,b). edge(a,d). edge(a,c). edge(b,d). edge(c,d). edge(d,c). /* Test run: | ?- dfsSearch(a,d). true ? ; true ? ; true ? ; no | ?- dfsSearch(a,X). X = a ? ; X = b ? ; X = d ? ; X = c ? ; X = d ? ; X = c ? ; X = c ? ; X = d ? ; no | ?- dfsSearch(X,c). X = c ? ; X = a ? ; X = a ? ; X = a ? ; X = b ? ; X = d ? ; no */