パスが有効か、真か偽かを確認する必要があります。次のように与えられます。
?-path(a,b,[(a,c),(c,d),(d,b)]).
true
リストの部分で、(a,c) の a または c にアクセスするにはどうすればよいですか? 文字列「(a,c)」のようなものですか?
そして、一般的に、このタイプの経路探索をどのように解決するのでしょうか? サンプルコード/疑似コードは大歓迎です。リスト内のタプル () を述語として解釈させる方法はありますか?
パスが有効か、真か偽かを確認する必要があります。次のように与えられます。
?-path(a,b,[(a,c),(c,d),(d,b)]).
true
リストの部分で、(a,c) の a または c にアクセスするにはどうすればよいですか? 文字列「(a,c)」のようなものですか?
そして、一般的に、このタイプの経路探索をどのように解決するのでしょうか? サンプルコード/疑似コードは大歓迎です。リスト内のタプル () を述語として解釈させる方法はありますか?
そこにいくつか質問があります...
文字列"(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
いますが、なぜあなたはそれをしたいのですか?
私が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] を使用しました。でも同じです。
しばらく経ちましたが、頭のてっぺんから始めます:
path(S, G, [(P, Q) | R]) :- ......
S は開始を意味し、G は目標を意味し、P と Q はグラフ内の接続されたノードであり、R はグラフの残りの部分です。
(a, c) は複合項であり、次のような述語でアクセスできます。
my_predicate((A, B)) :-
print(A),
print(B).