如何查找列表中的某些特定节点/元素?

问题描述 投票:0回答:2

我有一个这种形式的列表:

[node(2,5,4,3),node(3,5,4,3),node(2,10,12,4),node(5,2,2,2)]

我需要一个返回第一个值为 2 的所有节点的方法。 然后:

[node(2,5,4,3),node(2,10,12,4)]

我尝试了不同的方法但没有成功。

提前致谢。

prolog
2个回答
1
投票

我们可以检查我们正在寻找的模式:

nodetwo(node(2, _, _, _)).

然后我们可以使用

include/3
 [swi-doc] 来过滤列表:

?- include(nodetwo, [node(2,5,4,3),node(3,5,4,3),node(2,10,12,4),node(5,2,2,2)], L).
L = [node(2, 5, 4, 3), node(2, 10, 12, 4)].

0
投票

使用此代码:

| ?- findall(
       node(2,X,Y,Z),
       member(node(2,X,Y,Z),[node(2,5,4,3),node(3,5,4,3),node(2,10,12,4),node(5,2,2,2)]),
       Nodes).

Nodes = [node(2,5,4,3),node(2,10,12,4)]

yes
© www.soinside.com 2019 - 2024. All rights reserved.