我有一个算子,用于计算单个图块的N-puzzle域中的曼哈顿距离:
0.6.2
其中distanzaTile(Stato, Pos, Dis) :-
dim(D),
nth0(Pos, Stato, Elem),
Elem == v,
Y is floor(abs((9 - (Pos + 1))/D)),
X is mod(abs(9 - (Pos + 1)), D),
Dis is X+ Y.
!.
distanzaTile(Stato, Pos, Dis) :-
dim(D),
nth0(Pos, Stato, Elem),
Y is floor(abs((Elem - (Pos + 1))/D)),
X is mod(abs(Elem - (Pos + 1)), D),
Dis is X+ Y.
是数组,Stato
是数组中当前的位置,Pos
是实际结果。
现在,我必须遍历Dis
的所有元素并总结所有Stato
s。
我必须考虑Dis
周期。如何递归地实现类似的东西?
答案 0 :(得分:2)
我使用Stato
作为输入,使用计数器如下:
ricorri(_, [], _, A, A).
ricorri(Stato, [_|T], Pos, In, Out) :-
distanzaTile(Stato, Pos, Dis),
Pos2 is Pos + 1,
In2 is In + Dis,
ricorri(Stato, T, Pos2, In2, Out).
希望它可以帮到某人。