Программа, которая выводит N последних элемента списка - Prolog

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

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

Добрый день! Имею проблему с написанием простой программы, которая заключается в том, что есть список с любыми элементами и нужно, чтобы на экране вывели N последних элемента. Написал код, он не работает.
Заранее благодарен!

Решение задачи: «Программа, которая выводит N последних элемента списка»

textual
Листинг программы
predicates
nondeterm last(list, integer, integer)
nondeterm lastN(list, integer, integer)
clauses
last(L, N, Z):- length(L, X), X1=X-N, lastN(L, X1, Z).
lastN(L, 0, L).
lastN([_|Tail], X, L):- X2=X-1, lastN(Tail, X2, L).
 
goal
last([1,4,8,10,25], 2, L).

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

  1. У нас есть три предиката:
    • last(L, N, Z) - возвращает последний N элементов списка L и присваивает результат переменной Z.
    • lastN(L, N, Z) - возвращает последний N элементов списка L и присваивает результат переменной Z.
    • length(L, N) - возвращает длину списка L и присваивает результат переменной N.
  2. У нас есть два правила:
    • last(L, N, Z):- length(L, X), X1=X-N, lastN(L, X1, Z). - основное правило, которое использует длину списка L, чтобы вычислить последний N элементов и присваивает результат переменной Z.
    • lastN(L, 0, L). - базовое правило, которое возвращает список L, если N равно 0.
  3. У нас есть одно правило вывода:
    • lastN([_|Tail], X, L):- X2=X-1, lastN(Tail, X2, L). - рекурсивное правило, которое уменьшает размер списка на один и вызывает себя же для оставшейся части списка.
  4. В цели у нас есть вызов:
    • last([1,4,8,10,25], 2, L). - мы хотим получить последние два элемента из списка [1,4,8,10,25].

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


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

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

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