Prolog 从复杂术语列表中获取数字列表

Prolog 从复杂术语列表中获取数字列表,prolog,Prolog,我有一个复杂的术语列表,具有相同的函子和算术,但参数不同。大概是这样的: Elements = [element(a, 1), element(b,2), element(c,3)] Numbers = [1,2,3] 我希望从中生成一个新的列表,只包含列表中每个复杂项的第二个参数,如下所示: Elements = [element(a, 1), element(b,2), element(c,3)] Numbers = [1,2,3] 有没有一种方法可以设计谓词来解决任何长度的输入列表

我有一个复杂的术语列表,具有相同的函子和算术,但参数不同。大概是这样的:

Elements = [element(a, 1), element(b,2), element(c,3)]
Numbers = [1,2,3]
我希望从中生成一个新的列表,只包含列表中每个复杂项的第二个参数,如下所示:

Elements = [element(a, 1), element(b,2), element(c,3)]
Numbers = [1,2,3]

有没有一种方法可以设计谓词来解决任何长度的输入列表的这个问题?

Timofey对
findall/3
的回答:
findall(X,成员(元素(uu,X),元素),数字)。

使用递归谓词的解决方案:

element_indexes([], []).
element_indexes([element(_,N)|Es],[N|Ns]) :-
    element_indexes(Es, Ns).  

是的,这很直截了当。你有试过吗?提示:您可以使用
元素(u,N)
将在回溯时提供
N
的所有值。另外,请查看
findall
setof
。谢谢您的评论。是的,已经花了几个小时没有结果(我对Prolog很陌生)。我的大多数尝试都是围绕
元素(u,N)
进行的,但我发现我知道如何仅在已知数量的参数中使用它,这里的情况并非如此。我将尝试使用
foreach
setof
,谢谢你的建议。这是
findall
而不是
foreach
)如果您展示您的尝试,您将在SO上获得更多帮助。:)终于用
findall
解决了!谢谢,我会发布解决方案。现在我想知道如何用递归来解决这个问题。好吧,作为一个新手,我不允许发布我自己问题的答案,所以这里有一个解决方案:
findall(X,member(element(\ux),Elements),Numbers)
@Timofey:请单击“接受”按钮,将这个答案标记为有用。这是获得声誉的更好的方法!