我想了解为什么下一段代码不起作用。
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
请帮我理解。我不需要解决这个问题。我想了解为什么这段代码不好,这样我就可以避免将来写同样的错误。
非常感谢