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

      Комментарии к записи Ответ в теме: Подсчитать количество вложенных списков отключены
#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([_]).