2

事実のデータベースを通過し、各事実の数値を合計してリストに保存するルールを作成しようとしています:具体的には、これが質問です:

Q5 の回答に基づいて、2 つの駅間の所要時間を返す/表示するルールを作成します。

質問 5 への回答:

time(Station1,Station2) :- overground(Station1,Station2,Time),
    overground(Station1,_,Time),
    overground(_,Station1,Time).
time(Station2,Station1) :- overground(Station2,Station1,Time),
    overground(Station2,_,Time),
    overground(_,Station2,Time).
time(Station1,Station2) :- overground(Station1,Station3,Time),
    time(Station3,Station2);
    overground(Station1,Station3,Time),
    time(Station2,Station3).
time(Station1,Station2) :- overground(Station1,_,Time),
    overground(_,Station2,Time).
time(Station1,Station2) :- overground(Station2,_,Time),
    overground(_,Station1,Time).

リストを追加して「時間」を追加しようとしましたが、うまくいきません。

*はい、セミコロンです。

それに付随する別のファイルがあり、地上のすべての駅と時刻が「地上 (X,Y,Z)」の形式で含まれています。すなわち overground(kenton,southkenton,2) です。これは、ステーション 1、ステーション 2、およびステーション 1 から 2 に移動するのにかかる時間を示しています。

データベース全体を調べて、X と Y (質問 5 で確認) を見つけてから、2 つのステーションの間にあるすべての Z を合計してリストに入れようとしています。

4

1 に答える 1

1

正直なところ、質問 5 の回答にはリファクタリングが必要です。まず、同じテーマに関する質問へのリンクをいくつか示します。

このような再帰を処理する方法を理解したら、現在の質問に対する答えは簡単になるはずです。

于 2011-12-18T23:08:20.653 に答える