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

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

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

Добрый день! Имею проблему с написанием простой программы, которая заключается в том, что есть список с любыми элементами и нужно, чтобы на экране вывели N последних элемента. Написал код, он не работает.
Листинг программы
  1. domains
  2. list=integer*
  3. predicates
  4. nondeterm last(list, integer, integer) %список, кол-во последних элементов, единица для декрементирования
  5. clauses
  6. last([X|Tail], N, Z):- last([X|Tail], N, Z), write(Tail), Z=N-1. %смысл в том, что выводится Tail, при этом N уменьшается на 1
  7. last([], N, Z):- Z=0. %Если Z=0, то вывод Tail прекращается.
  8. goal
  9. last([1,4,8,10,25], 2, Kol).
Заранее благодарен!

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы