Strawberry prolog списки
Формулировка задачи:
найти N-ый элемент списка. подскажите пожалуйста, сделала вот так:
но получается, что он удаляет 3-й элемент, а надо чтобы выводил 3-й элемент, как это сделать?
Решение задачи: «Strawberry prolog списки»
textual
Листинг программы
nth([H|_], 1, H). nth([_|T], N, X) :- N > 1, Nn is N - 1, nth(T, Nn, X).
Объяснение кода листинга программы
Код на языке Prolog:
nth([H|_], 1, H).- Название:
nth - Аргументы:
[H|_],1,H - Значение:
H - Описание: Когда входной список состоит из одного элемента (головы), возвращается этот элемент.
- Название:
nth([_|T], N, X) :- N > 1, Nn is N - 1, nth(T, Nn, X).- Название:
nth - Аргументы:
[_|T],N,X - Значение:
X - Описание: Когда входной список содержит более одного элемента, код проверяет, является ли индекс
Nбольше 1. Если это так, то он вычисляет новый индексNnкакN - 1и рекурсивно вызывает функциюnthдля спискаTи нового индексаNn, присваивая результат переменнойX. Если индексNравен 1, то возвращается пустой список.
- Название:
- В результате, функция
nthвозвращает элемент списка с указанным индексом или пустой список, если индекс выходит за пределы списка.