Удалить пустые списки из списков списков в Прологе - PullRequest
0 голосов
/ 18 апреля 2020

Например, у меня есть список:

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

Как я могу удалить пустые элементы из этого списка?

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Используя findall / 3 и member / 2, мы можем написать таким образом

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

Здесь объединение Аргумент шаблона, который копируется в L с первым аргументом member / 2, отбрасывает пустые списки.

0 голосов
/ 18 апреля 2020

Мы можем сделать предикат, который успешно выполняется для пустых списков:

empty([]).

Тогда мы можем использовать exclude/3 [swi-doc] для отфильтровать элементы, для которых предикат завершается успешно:

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

Это дает нам:

?- exclude(empty, [[], [], [], [1], [2,2], [3]], L).
L = [[1], [2, 2], [3]].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...