2011-11-27 17 views
0
predicates 
      pathdistance(symbol,symbol,integer). 
      solve(symbol,symbol,integer). 

clauses 
    pathdistance(a,b,10). 
    pathdistance(b,c,20). 
    pathdistance(c,d,5). 
    pathdistance(d,e,15). 
    pathdistance(a,d,5). 
    pathdistance(c,e,10). 

solve(X,Z,C):- 
    pathdistance(X,Z,C). 

solve(X,Z,C):- 
    pathdistance(X,Y,Cost), 
    solve(Y,Z,C), 
    Cost is Cost+C. 

goal 
    solve(a,d,Cost). 

我想要的成本答案是a和d之間的所有C(總距離)的總和。上面的代碼不起作用,它不允許我帶一個新變量,可以請某人做上面的代碼的變化,以便我可以在Cost.Please總的距離。請記住,我是新的序言,謝謝!我可以跟蹤我在遞歸中工作時獲得的其他變量的值嗎?

回答

1

您需要使用的儲存器(另一個變量在解決謂語):

pathdistance(a,b,10). 
pathdistance(b,c,20). 
pathdistance(c,d,5). 
pathdistance(d,e,15). 
pathdistance(a,d,5). 
pathdistance(c,e,10). 

solve(Start, End, Result):- 
    solve(Start, End, 0, Result). 

在這裏,你介紹你的蓄電池,並把它初始化爲0。

solve(Start, End, TotalCost, Result) :- 
    pathdistance(Start, End, Cost), 
    Result is TotalCost + Cost. 

如果這一步是最後一步,你的結果是你的累加器(在這裏命名爲TotalCost)+最後一個成本的價值。

solve(Start, End, TotalCost, Result):- 
    pathdistance(Start, Waypoint, Cost), 
    NewTotalCost is TotalCost + Cost, 
    solve(Waypoint, End, NewTotalCost, Result). 

如果這不是最後一步,您只需通過成本增加累加器值。

希望這會有所幫助。

你應該給這個家庭作業貼上標籤,因爲這個問題在當天早些時候已經收到了許多因爲問題不好而引起的降價。雖然這次你清楚地表明你嘗試過,所以這是別的。請詢問您是否需要其他信息。

+0

代碼是正確的我知道,但我不知道爲什麼它總是給'無解',當我採取間接路徑從a到c或e。另外'是'在turbo prolog中不起作用,因此iam使用'=',我希望它不會有所作爲。 – Zohaib

+0

您所做的修改使代碼錯誤。您的行Acc是Acc + Cost使得該子句爲假,因爲Acc已經綁定,這就是爲什麼您需要聲明一個新變量(在我重命名後NewTotalCost)。我恢復了你的編輯並給變量賦予了更好的名字。 – m09

+0

非常感謝,我明白了。 – Zohaib

相關問題