私のリストには要素として多くのファクトが含まれています。リストのメンバーであるかどうか検索したいと思います。辺のリストから頂点を取得する
ここで私のプログラムでエッジファクトを定義しました。次に、ノード1がリストのメンバーであるかどうかを確認したいと思います。
?-my([edge(1,2),edge(2,3),edge(1,4)],1,L).
false.
私のリストには要素として多くのファクトが含まれています。リストのメンバーであるかどうか検索したいと思います。辺のリストから頂点を取得する
ここで私のプログラムでエッジファクトを定義しました。次に、ノード1がリストのメンバーであるかどうかを確認したいと思います。
?-my([edge(1,2),edge(2,3),edge(1,4)],1,L).
false.
あなたは、リストにある事実の種類を知っている必要があります。事実はエッジの形をとると仮定すると
(u、v)はは、以下の非常に単純な述語は、実行する必要があります。
node_exists(Node, [edge(U,_V)|_]) :-
U =:= Node,
!.
node_exists(Node, [edge(_U,V)|_]) :-
V =:= Node,
!.
node_exists(Node, [_|R1]) :-
node_exists(Node, R1).
サンプルクエリ:
?- node_exists(3, [edge(1,2),edge(2,3),edge(1,4)]).
true.
?- node_exists(2, [edge(1,2),edge(2,3),edge(1,4)]).
true.
?- node_exists(6, [edge(1,2),edge(2,3),edge(1,4)]).
false.
再帰はの力でありますPrologを学習するときにPrologを無視することはできません。
btwは、ノードがリストに何回存在するかを調べるソリューションです。
lits([H|_],E) :-
element(H,E).
lits([_H|T],E) :-
lits(T,E).
element(edge(A,_B),A).
ありがとうございました –
大歓迎です:-) –
単純な二ライナー述語:
has_node(UV,L) :-
member(edge(U,V), L),
(UV = U; UV = V).
または2つのmember/2
述語使用して:
has_node(UV,L) :-
member(edge(U,V), L),
member(UV, [U,V]).
、私たちはその後、複数の方向にそれを照会することができます
?- has_node(N, [edge(1,2),edge(2,3),edge(1,4)]).
N = 1 ;
N = 2 ;
N = 2 ;
N = 3 ;
N = 1 ;
N = 4.
?- has_node(2, [edge(1,2),edge(2,3),edge(1,4)]).
true ;
true ;
false.
?- has_node(2,L).
L = [edge(2, _G1245)|_G1248] ;
L = [edge(_G1244, 2)|_G1248] ;
L = [_G1247, edge(2, _G1245)|_G1251] ;
L = [_G1247, edge(_G1244, 2)|_G1251] ;
L = [_G1247, _G1250, edge(2, _G1245)|_G1254] ;
L = [_G1247, _G1250, edge(_G1244, 2)|_G1254] ;
L = [_G1247, _G1250, _G1253, edge(2, _G1245)|_G1257] .
?- has_node(A,L).
L = [edge(A, _G1257)|_G1260] ;
L = [edge(_G1256, A)|_G1260] ;
L = [_G1259, edge(A, _G1257)|_G1263] ;
L = [_G1259, edge(_G1256, A)|_G1263] ;
L = [_G1259, _G1262, edge(A, _G1257)|_G1266] ;
L = [_G1259, _G1262, edge(_G1256, A)|_G1266] .
を
ニースの問題、あなたのqは何ですか?うつ病?これはAIと何が関係していますか? –