Подталкивание: вы находите индексы, но вы их не собираете.
indices(List, E, Is) :-
indices_1(List, E, Is, 1).
Для пустого списка список индексов пуст, и элемент не имеет значения
indices_1([], _, [], _).
Если элемент похож на голову, соберите индекс.
indices_1([E|Xs], E, [I|Is], I) :-
I1 is I + 1,
indices_1(Xs, E, Is, I1).
Для этого требуется другое условие.
EDIT:
. Один из способов сделать это:
indices_1([X|Xs], E, Is, I) :- dif(X, E),
I1 is I + 1,
indices_1(Xs, E, Is, I1).
В предыдущем пункте глава списка и Элемент унифицированы. В этом пункте они явно различны. Это означает, что только одно из двух предложений может быть истинным для элемента списка в первом аргументе.
EDIT:
Другой способ сделать это - использовать findall
и nth1
:
indices(List, E, Is) :-
findall(N, nth1(N, List, E), Is).