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

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

Список положительных элементов формируется аналогично подсчету их количества. До тех пор, пока исходный список не окажется пустым, от него отделяется первый элемент (Head), а остальные обрабатываются рекурсивно. Первый элемент может быть либо добавлен к результату обработки хвоста, либо просто пропущен:

  1. если исходный список пуст, то в нем нет положительных элементов, значит результат работы функции – пустой список (результат во втором аргументе):
    positive_elements([], []):-!.
  2. если первый элемент положителен, то его значение добавляется к результату рекурсивной обработки остальных элементов:
      positive_elements([Head|Tail], [Head|TailPositive]):-
        Head > 0, !, positive_elements(Tail, TailPositive).

    Тут сначала выполняется разделение исходного списка на голову и хвост (также как рассматривалось ранее), а затем с использованием точно такого эе синтаксиса – формирование результата из Head и TailPositive во втором аргументе функции. Т.е. операция [Head|TailPositive] будет выполнена последней и с ее помощью из значения первого элемента и списка TailPositive будет сформирован новый список.

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