次のコードが機能しない理由を知りたいです。
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
理解を助けてください。これを修正する必要はありません。このコードが悪い理由を理解したいので、将来同じ間違いを書くのを避けることができます.
どうもありがとう