/* tiny 8-puzzle example */ neighbors([2,8,3,1,0,4,7,6,5],[[2,8,3,0,1,4,7,6,5],[2,0,3,1,8,4,7,6,5],[2,8,3,1,4,0,7,6,5]]). neighbors([2,8,3,0,1,4,7,6,5],[[0,8,3,2,1,4,7,6,5],[2,8,3,7,1,4,0,6,5]]). neighbors([2,0,3,1,8,4,7,6,5],[[0,2,3,1,8,4,7,6,5],[2,3,0,1,8,4,7,6,5]]). neighbors([2,8,3,1,4,0,7,6,5],[[2,8,0,1,4,3,7,6,5],[2,8,3,1,4,5,7,6,0]]). neighbors([0,8,3,2,1,4,7,6,5],[[8,0,3,2,1,4,7,6,5]]). neighbors([2,8,3,7,1,4,0,6,5],[[2,8,3,7,1,4,6,0,5]]). neighbors([0,2,3,1,8,4,7,6,5],[[1,2,3,0,8,4,7,6,5]]). neighbors([2,3,0,1,8,4,7,6,5],[[2,3,4,1,8,0,7,6,5]]). neighbors([2,8,0,1,4,3,7,6,5],[[2,0,8,1,4,3,7,6,5]]). neighbors([2,8,3,1,4,5,7,6,0],[[2,8,3,1,4,5,7,0,6]]). neighbors([8,0,3,2,1,4,7,6,5],[[8,3,0,2,1,4,7,6,5],[8,1,3,2,0,4,7,6,5]]). neighbors([2,8,3,7,1,4,6,0,5],[[2,8,3,7,0,4,6,1,5],[2,8,3,7,1,4,6,5,0]]). neighbors([1,2,3,0,8,4,7,6,5],[[1,2,3,8,0,4,7,6,5],[1,2,3,7,8,4,0,6,5]]). neighbors([2,3,4,1,8,0,7,6,5],[[2,3,4,1,0,8,7,6,5],[2,3,4,1,8,5,7,6,0]]). neighbors([2,0,8,1,4,3,7,6,5],[[0,2,8,1,4,3,7,6,5],[2,4,8,1,0,3,7,6,5]]). neighbors([2,8,3,1,4,5,7,0,6],[[2,8,3,1,4,5,0,7,6],[2,8,3,1,0,5,7,4,6]]). neighbors([8,3,0,2,1,4,7,6,5],[]). neighbors([8,1,3,2,0,4,7,6,5],[]). neighbors([2,8,3,7,0,4,6,1,5],[]). neighbors([2,8,3,7,1,4,6,5,0],[]). neighbors([1,2,3,8,0,4,7,6,5],[]). neighbors([1,2,3,7,8,4,0,6,5],[]). neighbors([2,3,4,1,0,8,7,6,5],[]). neighbors([2,3,4,1,8,5,7,6,0],[]). neighbors([0,2,8,1,4,3,7,6,5],[]). neighbors([2,4,8,1,0,3,7,6,5],[]). neighbors([2,8,3,1,4,5,0,7,6],[]). neighbors([2,8,3,1,0,5,7,4,6],[]). append([],Z,Z). append([A|X],Y,[A|Z]) <- append(X,Y,Z). is_goal([1,2,3,8,0,4,7,6,5]). search(F0) <- choose(Node,F0,F1) & neighbors(Node,NN) & add_to_frontier(NN,F1,F2) & search(F2). search(F0) <- choose(Node,F0,F1) & is_goal(Node). choose(N,[N|Flist],Flist). /* adding Nodelist to the back of Flist1 results in breadth-first search */ add_to_frontier(Nodelist,Flist1,Flist2) <- append(Flist1,Nodelist,Flist2).
Last revised: October 31, 2004