そこで、8 タイル パズルの空白のタイルがスライドする方向を見つけようとしています。
X/Y を使用してタイルを決定しています。
これが私が持っているコードです。
mandist( X /Y , X1 / Y1 , D, Direction):-
D is abs(X - X1 )+ abs(Y - Y1 ),
Y is Y1 ->(
( X is X1 +1 -> Direction ='left')
;
( X1 is X +1 -> Direction = 'right'))
; X is X1 ->(
( Y1 is Y +1 -> Direction ='up')
;
( Y is Y1 +1 -> Direction ='down')).
私が得ている問題は、マンディスト述語を呼び出すときに、期待した結果が得られないことです。
問題はifステートメントにあると確信しています。私がやろうとしていることを理解できるように、いくつかの疑似コードを書きました。
if(Y == Y1){
// Change the X Axis
if(X == X1 +1){
This is a left move
}
else{
This is a right move
}
}else if (X == X1){
// Change the Y Axis
if(Y == Y1 + 1){
This is an up move
}
else{
This is a down move
}
}
例:
move([1/1, 3/1, 1/3, 2/3, 3/3, 1/2, 2/2, 3/2,2,1], X, Direction)
次に、mandist 述語を呼び出します
D が 1 に設定されているため、合法的な動きが保証されます。
予想外の結果は次のとおりです。
mandist(1/1, X,1, Direction).
Direction = up ;
false
Direction = right
また、位置 1/1 は 3x3 グリッドの左下であり、左下からの移動は上または右のいずれかのみであるため、それが言うことも期待しています。
1/3 2/3 3/3
1/2 2/2 3/2
1/1 2/1 3/1