Ответ в теме: Поиск самого длинного вложенного списка

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

Стандартный предикат length используйте для определения длины списка.
Можно найти самый длинный вложенный список, а затем определить его длину.

Предикат longest_list принимает на вход два списка, возвращает самый длинный из них:

longest_list(ListA, ListB, ListA):-
length(ListA, LengthA),
length(ListB, LengthB),
LengthA > LengthB, !.
longest_list(_ListA, ListB, ListB).

Правило longest_inner_list принимает список списков, один из наиболее длинных (если несколько списков имею одну длину — будет возвращен первый из них):

longest_inner_list([InnerList], InnerList):-!. 
longest_inner_list([InnerList|Tail], LongestList):-
longest_inner_list(Tail, LongestInnerTailList),
longest_list(InnerList, LongestInnerTailList, LongestList).

Если исходный список содержит лишь один элемент (один вложенный список) — то решение очевидно. В противном случае список разделяется на голову и хвост, который обрабатывается рекурсивно. Из результата обработки хвоста и головы выбирается наиболее длинный список чтобы сформировать результат.

Вложения: