我有如下因素代碼序言爲什麼我的功能結果始終爲true
isInRange(Point1,Point2,Range):-
manhatan2(Point1,Point2,Manhatan),
Range>Manhatan.
manhatan2計算2點之間的曼哈坦距離給作爲一個2元素的列表[X,Y]
我不t理解爲什麼isInRange總是計算結果爲true
isInRange([0,0],[0,10],9)計算結果爲真 isInRange([0,0],[0,10],100)爲真
我很確定我做的manhatan功能正確。已經測試過很多值
任何人都可以幫我理解我的代碼有什麼問題嗎?
%編輯從這裏開始
所以我追查這該死的東西,這裏是更多的代碼,我使用
modul(A,B,R):-A<B,R is B-A.
modul(A,B,R):-A>B,R is A-B.
extractFromList([H|_],X,R):- X is 0,R is H.
extractFromList([_|T],X,R):- X1 is X-1,extractFromList(T,X1,R).
manhatan(X1,Y1,X2,Y2,R):- modul(X1,X2,R1),modul(Y1,Y2,R2),R is R1+R2.
manhatan2(P1,P2,R):-
extractFromList(P1,0,X1),
extractFromList(P1,1,Y1),
extractFromList(P2,0,X2),
extractFromList(P2,1,Y2),
manhatan(X1,Y1,X2,Y2,R).
fromFromList從給定的列表
MODUL應該返回提取第X元素提取物| AB |
跟蹤isInRange([0,0],[0,10],100),當我whanted時。
當比較manhatan與範圍並且 開始重做模塊(0,10,_GXXX)時將_GXXX評估爲-10,因此追蹤isInRange([0,0],[0,10],9),因此Manhatan <範圍條件評估爲真,因此所有isInRange評估爲真
爲什麼這樣做?
爲什麼重做這種模塊計算?