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