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

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

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки Поиск самого длинного вложенного списка

Помечено: ,

В этой теме 2 ответа, 2 участника, последнее обновление  Sash 2 года/лет назад.

  • Автор
    Сообщения
  • #2251

    Sash
    Участник

    Дан список L, состоящий из списков.

    Помогите, пожалуйста, определить предикат max_ln(L,N), с помощью которого можно найти длину N самого длинного списка, вложенного в L.

    Спасибо.

  • #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).

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

    Вложения:
  • #2255

    Sash
    Участник

    Спасибо за помощь.

Для ответа в этой теме необходимо авторизоваться.