Поскольку вы знаете, что он отсортирован, вы можете потерпеть неудачу рано, если Index нет в списке.
play(Index,[(Index,Count,Color)|T], [(Index,NewCount,Color)|T]) :-
NewCount is Count + 1.
play(Index,[(IndexT,_,_)|_], _) :-
Index < IndexT, !, fail.
play(Index,[Tuple|T1],[Tuple|T2]) :-
play(Index,T1,T2).
Учитывая вышеописанную неэффективность, вас может заинтересовать возможное решение, использующее стандартные встроенные функции для манипулирования списками.
play_bt(Index, Old, New) :-
append(Left, [(Index, Count, Color)|Rest], Old),
NewCount is Count + 1,
append(Left, [(Index, NewCount, Color)|Rest], New).