如何翻译序言中的命令式任务
How to translate an imperative task in prolog
我有一个函子可以计算单个图块的 N-puzzle 域中的曼哈顿距离:
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
的所有元素并对所有 Dis
求和。
思考势在必行,我会去 for
周期。如何递归实现类似的东西?
我使用 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).
希望对某人有所帮助。
我有一个函子可以计算单个图块的 N-puzzle 域中的曼哈顿距离:
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
的所有元素并对所有 Dis
求和。
思考势在必行,我会去 for
周期。如何递归实现类似的东西?
我使用 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).
希望对某人有所帮助。