0

我想了解为什么下一段代码不起作用。

modul(A,B,R):-A<B,R is B-A.
modul(A,B,R):-R is A-B.

这里从列表中提取第 X 个元素

extractFromList([H|_],X,R):- X is 0,R is H.
extractFromList([_|T],X,R):- X1 is X-1,extractFromList(T,X1,R).

这里计算 2 个点的曼哈顿距离。这些点作为 2 元素列表传递。我将写调用用于调试目的

manhatan2(P1,P2,R):-
    extractFromList(P1,0,X1),write(X1),nl,
    extractFromList(P1,1,Y1),write(Y2),nl,
    extractFromList(P2,0,X2),write(X2),nl,
    extractFromList(P2,1,Y2),write(Y2),nl,
    manhatan(X1,Y1,X2,Y2,R).

运行manhatan2([10,1],[20,1],R).打印

10,_L165,20,1,_L165 
ERROR: </2: Arguments are not sufficiently instantiated
Exception: (8) modul(1, _G1122, _G1123)
? creep

跟踪此调用,我发现Y1计算方式没有任何问题,但我得到了_L165

请帮我理解。我不需要解决这个问题。我想了解为什么这段代码不好,这样我就可以避免将来写同样的错误。

非常感谢

4

0 回答 0