Так что я пытаюсь найти направление, в котором пустая плитке в 8 плитке головоломке будет скользящей,Mandist предикат не дает ожидаемые результаты
Я использую 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')).
Проблема я получаю в том, что при вызове mandist предиката это не дает мне результаты, я надеялся.
Я уверен, что проблема с, если заявление, я написал несколько psuedocode, так что вы можете понять, что я пытаюсь сделать,
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 является очень нижней левой части 3х3 и только перемещается из нижней левой либо вверх или вправо
1/3 2/3 3/3
1/2 2/2 3/2
1/1 2/1 3/1
Что является окончательным 'else' дело? –
Нет окончательного еще @WillemVanOnsem – user3667111
, так что в этом случае предикат должен потерпеть неудачу? Что должно произойти, если 'Y' не равно' Y1', а 'X' равно' X1'? –