Проверить, что L – список из N раз повторенных элементов X

      Комментарии к записи Проверить, что L – список из N раз повторенных элементов X отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки Проверить, что L – список из N раз повторенных элементов X

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

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

    questioner
    Участник

    Нужно решить на SWI Prolog:

    Необходимо написать предикат p(+X, +N, -L) – истинный тогда и только тогда, когда L – список из N раз повторенных элементов X.
    Заранее благодарю за помощь.)

  • #1899

    p(_X, 0, []):-!.
    p(X, Length, [X|Tail]):-
      TailLength is Length - 1, 
      p(X, TailLength, Tail).

    1. если L — пустой список, а Length равно нулю, то при любом значении X предикат истинен (вычисления завершены);
    2. если первый элемент L — это X, то:
      1. остальную часть L называем Tail;
      2. вычисляем новое значение длины (TailLength);
      3. если предикат истинен для TailLength и остатка списка — то предикат истинен (вычисления завершены);
    3. если ни одно сопоставление не прошло успешно — то предикат ложен (вычисления завершены).

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