このタスクでは、例えばedge(1,0)edge(2,0)edge(1,3)で満たされたPrologデータベースがあります
エッジは、2つのポイントが結合されていることを意味します。
リーチ(i、j、k)という関数を作成するように求められます。ここで、iは開始点、jは終了点、kは使用できるステップ数です。Kは、再帰ループを停止するために必要です。
私が持っている唯一のエッジが1から3になり、6に到達しようとしていると仮定します。そうすると、1から6に一度に取得できなくなります。だから私はどこかに行くことができる場所を探して、そこから6に行くことができるかどうかを確認します。一度に行くことができる最初の場所は3なので、そこから6に行くようにします。
私はそうしました:
%% Can you get there in one step (need two rules because all links are
%% from smaller to greater, but we may need to get from greater to smaller.
reach1(I, J,_K) :-
edge(I, J).
reach1(I, J,_K) :-
edge(J, I).
%% Chhose somewhere you can get to in one step: can you get from there
%% to your target?
reach1(I,J,K) :-
K>1,
edge(I, B),
K1 is K-1,
reach1(B,J,K1).
reach1(I,J,K) :-
K>1,
edge(B, I),
K1 is K-1,
reach1(B,J,K1).
これは機能しますが、kを使用せずに「カット」を使用してこれを行うように求められる2番目の部分で立ち往生しています。
誰かがこれを行う方法を知っていますか、または私にいくつかのポインタを与えることができますか?