Вы должны написать функцию, которая возвращает вам список. В Prolog нет такой вещи, как оператор возврата, но вы также можете использовать параметры, чтобы указать внешние вещи.
% The second parameter will be our OUT parameter.
% It can be anything that we specify.
% Return an empty list, because our input is empty as well
numFilter([],[]).
% return a list with H and what will come out recursively
numFilter([H|T],[H|T2]) :- number(H), numFilter(T,T2).
% return a list with what will come out recursively. H is not a number
numFilter([H|T],T2) :- not(number(H)), numFilter(T,T2).
Таким образом, вы указываете правила для каждого вида ввода, который может произойти с вами. У нас есть один для пустого списка, и у нас есть два для списка, который имеет по крайней мере один элемент. Первый элемент будет проверен, и мы продолжим с этим рекурсивно.
Мы можем вызвать эту функцию с помощью вызова, подобного этому:
numFilter([a,b,7,d,3,e,f,5],A).
A - это переменная, которая будет заполнена прологом во время выполнения.
number: 1
- это функция из словаря прологов .
Так что для такого рода заданий вам нужна рекурсия для ваших списков. Помни это.