从 Prolog 中的列表列表中删除空列表

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

例如,我有一个列表:

[ [], [], [], [1], [2,2], [3] ]

如何从此列表中删除空元素?

prolog
3个回答
1
投票

我们可以创建一个对空列表成功的谓词:

empty([]).

然后我们可以利用

exclude/3
[swi-doc] 过滤掉谓词成功的元素:

exclude(empty, [[], [], [], [1], [2,2], [3]], L).

这给了我们:

?- exclude(empty, [[], [], [], [1], [2,2], [3]], L).
L = [[1], [2, 2], [3]].

1
投票

使用 findall/3 和 member/2 我们可以这样写

?- findall([H|T],member([H|T],[[], [], [], [1], [2,2], [3]]),L).
L = [[1], [2, 2], [3]].

这里,模板参数的统一,在 L 中复制,带有第一个成员/2 参数,丢弃空列表。


0
投票

我会使用删除/3

?- delete([ [], [], [], [1], [2,2], [3] ], [], L).
L = [[1], [2, 2], [3]].
© www.soinside.com 2019 - 2024. All rights reserved.