Подсчет количества вложенных списков заданной длины

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

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

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

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

    questioner
    Участник

    Здравствуйте. Помогите, пожалуйста, с задачей на списки:

    на входе дается список с вложенными подсписками и желаемая длина (количество элементов в списке). На выходе мы должны подсчитать количество списков этой длины.

    Подскажите, как это реализовать.

  • #1776

    count_inner_lists([], _Len, 0):-!.
    count_inner_lists([InnerList|Tail], Len, Count):-
      length(InnerList, Len), !, 
      count_inner_lists(Tail, Len, CountTail),
      Count is CountTail + 1.
    count_inner_lists([_InnerList|Tail], Len, Count):-
      count_inner_lists(Tail, Len, Count).

    Если исходный список пуст, то в нем нет вложенных списков любой длины — программа возвращает ноль.
    В противном случае исходный список разделяется на голову (InnerList) и хвост (Tail).
    В любом случае должен быть выполнен рекурсивный вызов, в результате которого будет получено количество списков заданной длины для хвоста списка.
    Если длина InnerList совпадает с заданной (проверка выполняется стандартной функцией length), то к полученному результату необходимо добавить единицу.
    Если вы используете строго типизированный диалект пролога, то такая функция работать не будет если список содержит не только вложенные списки, но и атомы, т.к. для атомов не сработает функция length. Проблему можно решить объявив свою собственную функцию, которая возвращает либо длину списка, либо (если сопоставление аргумента со списком не прошло) — завершающуюся неудачей.

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