Найти количество вхождений подсписка в список - Prolog

Узнай цену своей работы

Формулировка задачи:

Найти количество вхождений подсписка в список. Например список (1 2 3) в списке (1 2 3 5 9 4 1 2 3 5 9 1 2 3), встречается 3 раза, число вхождений - 3.

Решение задачи: «Найти количество вхождений подсписка в список»

textual
Листинг программы
incl_num(Xs, Ys, N0, N) :-
  my_append(Xs, Zs, Ys),
  N1 is N0 + 1,
  !,
  incl_num(Xs, Zs, N1, N).
incl_num(Xs, [_ | Ys], N0, N) :-
  !,
  incl_num(Xs, Ys, N0, N).
incl_num(_, _, N, N).
  
% если левый список пуст, то итоговый список совпадает с правым списком
my_append([], RightList, RightList).
% иначе, взять голову из левого списка и перенести в голову итогового списка,
my_append([LeftHead|LeftTeil], RightList, [LeftHead|RightPart]) :-
    % продолжить для хвоста левого списка
    my_append(LeftTeil, RightList, RightPart).

Объяснение кода листинга программы

Код решает задачу подсчета количества вхождений подсписка в список.

  1. В первом правиле (incl_num/4) есть 4 аргумента:
    • Xs - исходный список
    • Ys - подсписок, количество вхождений которого нужно найти
    • N0 - начальное значение счетчика
    • N - конечное значение счетчика (может быть опущено, тогда используется N0) В этом правиле происходит рекурсивный обход списка, начиная с Xs. Если Xs пуст, то список Ys считается искомым подсписком и счетчик увеличивается на единицу. Если Xs не пуст, то он разделяется на голову и хвост. Голова добавляется в начало итогового списка, а хвост передается в рекурсивный вызов с обновленным счетчиком.
  2. Второе правило (my_append/3) используется для объединения двух списков. Если первый список пуст, то он просто заменяется на второй список. В противном случае, первый список разделяется на голову и хвост, а голова добавляется в начало итогового списка. Затем вызывается рекурсивный вызов для хвоста и второго списка.
  3. Третье правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  4. Четвертое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  5. Пятое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  6. Шестое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  7. Седьмое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  8. Восьмое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  9. Девятое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  10. Десятое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  11. Одиннадцатое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  12. Двенадцатое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  13. Тринадцатое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  14. Четырнадцатое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  15. Пятнадцатое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  16. Шестнадцатое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  17. Семнадцатое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  18. Восемнадцатое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.
  19. Девятнадцатое правило (incl_num/4) используется, когда первый список пуст и его нужно сравнить с правым списком. Если они совпадают, то счетчик увеличивается на единицу.
  20. Двадцатое правило (my_append/3) используется, когда первый список пуст и его нужно просто заменить на второй список.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы