Мы можем сделать предикат, который успешно выполняется для пустых списков:
empty([]).
Тогда мы можем использовать exclude/3
[swi-doc] для отфильтровать элементы, для которых предикат завершается успешно:
exclude(empty, [[], [], [], [1], [2,2], [3]], L).
Это дает нам:
?- exclude(empty, [[], [], [], [1], [2,2], [3]], L).
L = [[1], [2, 2], [3]].