Это легко организовать, «проглотив» ваш список и одновременно построив результат в характерно прологическом нисходящем порядке:
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, ........ )
).
Видите?
Естественно, базовые случаи отсутствуют, но вы можете взять их отсюда!