пролог: логическое программирование - PullRequest
1 голос
/ 14 февраля 2011

Как мне написать код Пролога, который выбирает только цифры из списка, содержащего цифры и буквы? Например, если у меня есть [a, b, 7, d, 3, e, f, 5], я хочу написать код, который дает мне [7,3,5]. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

это легко поместить в поиск:

numList(ListIn, Nums) :-
  findall(H, (member(H, ListIn), number(H)), Nums).

запрос с:

?- numList([a,b,7,d,3,e,f,5], Nums).
Nums = [7, 3, 5].

поиск пролога действительно фантастически полезен!

2 голосов
/ 14 февраля 2011

Вы должны написать функцию, которая возвращает вам список. В 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 - это функция из словаря прологов .

Так что для такого рода заданий вам нужна рекурсия для ваших списков. Помни это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...