2016-11-13 78 views
1

我有一個基於柵格地圖,而我試圖建立一個謂語,讓我2點之間的距離對角線,這是我應得的序言,對角線距離

dist_diagonal((X,Y),(X,W),Passos,D):- 
    dist_ortogonal((X,Y),(X,W),D1), 
    D is D1 + Passos. 

dist_diagonal((X,Y),(Z,Y),Passos,D):- 
    dist_ortogonal((X,Y),(Z,Y),D1), 
    D is D1 + Passos. 

dist_diagonal((X,Y),(Z,W),Passos,_):- 
    X>Z, 
    Y<W, 
    Passos1 is Passos+1, 
    X1 is X-1, 
    Y1 is Y+1, 
    dist_diagonal((X1,Y1),(Z,W),Passos1,_). 

dist_diagonal((X,Y),(Z,W),Passos,_):- 
    X<Z, 
    Y<W, 
    Passos1 is Passos+1, 
    X1 is X+1, 
    Y1 is Y+1, 
    dist_diagonal((X1,Y1),(Z,W),Passos1,_). 

但是當我嘗試測試:

dist_diagonal((5,4),(3,8),0,D). 

我得到true,而不是爲d

值這有什麼錯我的斷言? PS:我應該補充一點,我只會在驗證碼Y<Z時使用它。 PS2:請注意,我使用8種動作計算距離,而不是歐幾里德距離。 Diagonal distance

回答

0

你需要寫:的dist_diagonal((X,Y),(Z,W),Passos,D):-代替dist_diagonal((X,Y),(Z,W),Passos,_):-

你的謂詞返回true,因爲d可以是任何東西(因爲你使用匿名變量「_」)。

所以你需要寫:

dist_diagonal((X,Y),(Z,W),Passos,D):- 
    X>Z, 
    Y<W, 
    Passos1 is Passos+1, 
    X1 is X-1, 
    Y1 is Y+1, 
    dist_diagonal((X1,Y1),(Z,W),Passos1,D). 

dist_diagonal((X,Y),(Z,W),Passos,D):- 
    X<Z, 
    Y<W, 
    Passos1 is Passos+1, 
    X1 is X+1, 
    Y1 is Y+1, 
    dist_diagonal((X1,Y1),(Z,W),Passos1,D). 

我無法測試,因爲我沒有dist_ortogonal/3謂詞的定義,但我寫的是一個簡單的版本,它的工作,所以應該是工作的罰款。

+0

非常感謝!!!! – user3636673

+0

很高興幫助! – coder