序言; 找到列表项

Cod*_*der 4 list prolog

我有一个对列表,并希望找到具有相应第一个值的元素.

?- 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很新.

cod*_*der 5

以下是使用内置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)