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 (合計距離) の合計です。上記のコードは機能していません。新しい変数を取得できません。誰かが上記の変更を行ってください。コストで合計距離を取得できるようにコードを作成します。私はプロローグが初めてであることを覚えておいてください、ありがとう!

4

1 に答える 1

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).

これが最後のステップでない場合は、アキュムレータの値をコストだけ増やします。

お役に立てれば。

この宿題にはタグを付ける必要がありますが、その日の早い段階で質の悪い質問が原因で、この問題にはすでに多くの反対票が寄せられているためです。今回はあなたが試したことを明確に示しているので、それは別のものです. その他の情報が必要な場合はお尋ねください。

于 2011-11-27T10:05:58.773 に答える