1

パスが有効か、真か偽かを確認する必要があります。次のように与えられます。

?-path(a,b,[(a,c),(c,d),(d,b)]).
true

リストの部分で、(a,c) の a または c にアクセスするにはどうすればよいですか? 文字列「(a,c)」のようなものですか?

そして、一般的に、このタイプの経路探索をどのように解決するのでしょうか? サンプルコード/疑似コードは大歓迎です。リスト内のタプル () を述語として解釈させる方法はありますか?

4

4 に答える 4

1

そこにいくつか質問があります...

文字列"(a、c)"のようなものですか?

「いいね」とはどういう意味ですか?彼らは統一しますか?いいえ。

?- "(a, c)" = (a, c).

No

リストの部分で、(a、c)のaまたはcにアクセスするにはどうすればよいですか?

?- L = [(a, c) | _], L = [(A, C) | _].

L = [ (a, c)|_G184],
A = a,
C = c

リスト内のタプル()を述語として解釈させる方法はありますか?

たぶん使ってcall/Nいますが、なぜあなたはそれをしたいのですか?

于 2009-11-03T23:35:30.000 に答える
1

私が2年生のときの例を挙げます。

% Representation [[a,b],[b,a],[b,c]]:
%
%          a <--> b -->c
%

% Does aexists a path beetween X and Y?
% Example:  path(c,b,[[a,b],[b,c],[d,e],[c,d],[b,e],[e,c],[e,f],[a,a]]). No
%           path(c,f,[[a,b],[b,c],[d,e],[c,d],[b,e],[e,c],[e,f],[a,a]]). Yes

path(X,Y,G):-pathAux(X,Y,G,[]).
pathAux(X,Y,G,_T):-member([X,Y],G).
pathAux(X,Y,G,T) :-member([X,Z],G),not(member([X,Z],T)),
                 append([[X,Z]],T,Tt),pathAux(Z,Y,G,Tt).

(a,b) の代わりに [a,b] を使用しました。でも同じです。

于 2009-11-05T19:35:51.713 に答える
0

しばらく経ちましたが、頭のてっぺんから始めます:

path(S, G, [(P, Q) | R]) :- ......

S は開始を意味し、G は目標を意味し、P と Q はグラフ内の接続されたノードであり、R はグラフの残りの部分です。

于 2009-11-03T18:45:40.010 に答える
0

(a, c) は複合項であり、次のような述語でアクセスできます。

 my_predicate((A, B)) :-
    print(A),
    print(B).
于 2009-11-03T18:27:59.227 に答える