Как найти количество одинаковых элементов в списке Prolog? - PullRequest
2 голосов
/ 19 июня 2020

У меня вопрос по топи c,

Я знаю, что список Prolog работает как [голова, (хвост)], но есть ли какая-то функция или волшебное прикосновение (примеры кодов) для поиска числа элементов в списке ?. Есть ли способ получить количество одинаковых элементов в списке, а затем сравнить список или уникальный элемент в нем?

Ответы [ 2 ]

5 голосов
/ 19 июня 2020

Один из способов:

get_uniq(List,Uniq) :-
    select(Uniq,List,SubList),   % chose an item from the list
    \+ member(Uniq,SubList).     % make sure it doesn't have a pair

%% добавлено позже

Вы можете получить полный список уникальных предметов с помощью:

findall(N,get_uniq([2,1,4,3,2,5,1,4,3],N), Ns).
3 голосов
/ 22 июня 2020

Библиотека ( агрегат ) должна быть вашим первым выбором для этой задачи. Обычно

?- L=[a,b,c,a],setof(C*E,aggregate(count,member(E,L),C),R).
L = [a, b, c, a],
R = [1*b, 1*c, 2*a].

, который может быть специализирован для получения списка элементов, встречающихся один раз таким образом

?- L=[a,b,c,a],setof(E,aggregate(count,member(E,L),1),R).
L = [a, b, c, a],
R = [b, c].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...