Ответ в теме: Проверить, что L – список из N раз повторенных элементов X

      Комментарии к записи Ответ в теме: Проверить, что L – список из N раз повторенных элементов X отключены
#1899

p(_X, 0, []):-!.
p(X, Length, [X|Tail]):-
TailLength is Length - 1, 
p(X, TailLength, Tail).

  1. если L — пустой список, а Length равно нулю, то при любом значении X предикат истинен (вычисления завершены);
  2. если первый элемент L — это X, то:
    1. остальную часть L называем Tail;
    2. вычисляем новое значение длины (TailLength);
    3. если предикат истинен для TailLength и остатка списка — то предикат истинен (вычисления завершены);
  3. если ни одно сопоставление не прошло успешно — то предикат ложен (вычисления завершены).