У меня есть карта сетки на основе, и я пытаюсь создать предикат, который дает мне диагональное расстояние между 2 точками, это то, что у меня есть,Пролога, диагональное расстояние
dist_diagonal((X,Y),(X,W),Passos,D):-
dist_ortogonal((X,Y),(X,W),D1),
D is D1 + Passos.
dist_diagonal((X,Y),(Z,Y),Passos,D):-
dist_ortogonal((X,Y),(Z,Y),D1),
D is D1 + Passos.
dist_diagonal((X,Y),(Z,W),Passos,_):-
X>Z,
Y<W,
Passos1 is Passos+1,
X1 is X-1,
Y1 is Y+1,
dist_diagonal((X1,Y1),(Z,W),Passos1,_).
dist_diagonal((X,Y),(Z,W),Passos,_):-
X<Z,
Y<W,
Passos1 is Passos+1,
X1 is X+1,
Y1 is Y+1,
dist_diagonal((X1,Y1),(Z,W),Passos1,_).
, но когда я пытаюсь проверить:
dist_diagonal((5,4),(3,8),0,D).
я получаю true
вместо значения для D
Что случилось с моим предикатом?
PS: Я должен добавить, что я буду использовать это только с точками, которые отвергают Y<Z
. PS2: Обратите внимание, что я рассчитываю расстояние, используя 8 видов движений, а не эвклидовое расстояние. Diagonal distance
Большое спасибо !!!! – user3636673
Рад, что помогло! – coder