如何在prolog中翻译命令性任务

时间:2018-04-22 11:24:33

标签: prolog declarative

我有一个算子,用于计算单个图块的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周期。如何递归地实现类似的东西?

1 个答案:

答案 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).

希望它可以帮到某人。