Prolog代码生成错误

时间:2013-10-26 19:46:43

标签: prolog

我想了解下一段代码无效的原因。

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

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

非常感谢

0 个答案:

没有答案