例如,我有一个列表:
[ [], [], [], [1], [2,2], [3] ]
如何从此列表中删除空元素?
我们可以创建一个对空列表成功的谓词:
empty([]).
然后我们可以利用
exclude/3
exclude(empty, [[], [], [], [1], [2,2], [3]], L).
这给了我们:
?- exclude(empty, [[], [], [], [1], [2,2], [3]], L). L = [[1], [2, 2], [3]].
使用 findall/3 和 member/2 我们可以这样写
?- findall([H|T],member([H|T],[[], [], [], [1], [2,2], [3]]),L). L = [[1], [2, 2], [3]].
这里,模板参数的统一,在 L 中复制,带有第一个成员/2 参数,丢弃空列表。
我会使用删除/3:
?- delete([ [], [], [], [1], [2,2], [3] ], [], L). L = [[1], [2, 2], [3]].