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

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

inList([], 0):-!.
inList([Head|Tail], InnerListCount):-
  is_list(Head), !, 
  inList(Head, HeadCount), inList(Tail, TailCount), 
  InnerListCount is HeadCount + TailCount + 1.
inList([_Head|Tail], InnerListCount):-
  inList(Tail, InnerListCount).

Возможны три вариант входных данных:

  1. пустой исходный список – не содержит вложенных списков, результатом работы функции должен быть ноль;
  2. список, первый элемент которого также является списком (проверка выполняется стандартным предикатом is_list). В этом случае результат функции должен складываться из результатов рекурсивной обработке первого элемент (Head), остальных элементов исходного списка (Tail) и единицы (т.к. по крайней мере один вложенный список мы уже нашли);
  3. если первый элемент не является списком, то его следует игнорировать и рекурсивно обработать остальные элементы

Встроенный предикат is_list есть в SWI и GNU Prolog, однако, в Strawberry я его вроде бы не видел, при необходимости его можно реализовать самостоятельно: правило is_list.