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