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