Ваша структура входных данных не содержит никаких списков, это вложенная структура с числами на листьях:
?- write_canonical(2*3*4*5).
*(*(*(2, 3), 4), 5)
Поэтому maplist здесь не очень полезен.Вместо этого напишите простой рекурсивный предикат для обхода (и восстановления) рекурсивной структуры данных:
simplify(N, Exp, N^Exp) :-
number(N).
simplify(L*R, Exp, LExp*RExp) :-
simplify(L, Exp, LExp),
simplify(R, Exp, RExp).
Структура кода соответствует структуре данных.Пример выполнения
?- simplify(2*3*4*5, 6, E).
E = 2^6*3^6*4^6*5^6
Yes (0.00s cpu)