我有一个对列表,并希望找到具有相应第一个值的元素.
?- findconn1(9, [(9,[23,33]),(42,[21,322])], R).
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,我希望得到的结果是(9,[23,23])在R.
代码是
findconn(X, [], R).
findconn(X, [(H,T)|Y], R) :-
member(X, H),
findConn(X, Y),
append(T, T, R).
Run Code Online (Sandbox Code Playgroud)
false尽管元素存在,它总是返回.还有其他方法可以返回,因为我对Prolog很新.
以下是使用内置member/2谓词的简单方法:
findconn1(X,L,(X,L1)):- member((X,L1),L).
Run Code Online (Sandbox Code Playgroud)
例:
?- findconn1(9,[(9,[23,33]),(42,[21,322])],R).
R = (9, [23, 33]) ;
false.
Run Code Online (Sandbox Code Playgroud)
通过上述解决方案,请注意,如果9不止一次存在,您将获得所有解决方案:
?- findconn1(9,[(9,[23,33]),(42,[21,322]),(9,[1,2])],R).
R = (9, [23, 33]) ;
R = (9, [1, 2]).
Run Code Online (Sandbox Code Playgroud)