Пролог - определить количество дубликатов в списке и превратить сумму в экспоненту - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу рассчитать количество дубликатов и удалить их, а также вывести количество дубликатов в качестве показателя степени.Не дубликаты остаются прежними.Например:

exponent([2, 2, 3, 5, 5], X).
X = [2^2, 3, 5^2]

и

exponent([2, 2, 2, 2, 2, 2, 2], X).
X = [2^7]

1 Ответ

0 голосов
/ 20 сентября 2018

Это легко организовать, «проглотив» ваш список и одновременно построив результат в характерно прологическом нисходящем порядке:

exponent( [X | XS], Ex ):-
    exponent( 1, X, XS, Ex ).

Подождите, что?Мы еще ничего конкретного не сказали ... За исключением того, что мы уже видели один X.Тогда

exponent( I, X, [Y | XS], Ex ):-
    (   X =:= Y 
    ->  I1 is ...., 
        exponent(I1, X, XS, Ex)    % right? we go on 'eating up' the input
    ;
        Ex = [ (I,X) | Ex2 ],      % intentionally 'wrong' output
        exponent( 1, ........ )
    ).

Видите?

Естественно, базовые случаи отсутствуют, но вы можете взять их отсюда!

...