swap(E,T,[T|L],[E|L]) :- d(E,T,1).
swap(E,T,[T1|L],[T1|L1]) :- swap(E,T,L,L1).
/*
swap(番号0のタイルの座標,
   交換するタイルの座標,
   交換前の番号1〜8までのタイルの座標のリスト,
     交換後の番号1〜8までのタイルの座標のリスト)
隣(位置の差が1のもの)を見つけ出して,その座標を交換すると考える
*/

test12_8(T,L2) :- 
swap( (2,3),T,[ (1,3),(2,2),(3,3),(3,2),(3,1),(2,1),(1,1),(1,2)], L2 ).

/* To-be-true: three solutions
T = (1,3), L2 = [ (2,3),(2,2),(3,3),(3,2),(3,1),(2,1),(1,1),(1,2) ] ;
T = (2,2), L2 = [ (1,3),(2,3),(3,3),(3,2),(3,1),(2,1),(1,1),(1,2)] ;
T = (3,3), L2 = [ (1,3),(2,2),(2,3),(3,2),(3,1),(2,1),(1,1),(1,2)] 
*/