Ответ в теме: Количество положительных элементов списка

      Комментарии к записи Ответ в теме: Количество положительных элементов списка отключены
#2221

Функция подсчета количества положительных элементов:

  1. возвращает ноль если исходный список пуст, при этом отсечением запрещается перебор других вариантов:
    list_count_positive([], 0):-!.
  2. разделяет список на первый элемент и остальные (голову и хвост). Выполняется сравнение первого элемента с нулем — если он положителен, то остальные элементы (Tail) обрабатываются рекурсивно (вычисляется количество положительных элементов в хвосте — TailCount). К результату обработки хвоста прибавляется единица (т.к. первый элемент положителен и его нужно учесть) — полученное значение возвращается:
      list_count_positive([Head|Tail], Count):-
        Head > 0, !, list_count_positive(Tail, TailCount),
        Count = TailCount + 1.

    После того, как сравнение первого элемента с нулем прошло успешно стоит оператор отсечения, который запретит интерпретатору переход на третье правило, которое должно начинать работать лишь если первый элемент списка не является положительным.

  3. Если первый элемент не положителен, то результат работы функции должен совпадать с результатом рекурсивной обработки хвоста списка. Список по прежнему необходимо разделять на голову и хвост, однако значение первого элемента не участвует в вычислении результата, поэтому переменная должна быть описана анонимной — перед ее именем ставится символ подчеркивания:
      list_count_positive([_Head|Tail], Count):-
        list_count_positive(Tail, Count).