Нахождение n-го элемента списка - Prolog
Формулировка задачи:
Написать программу для получения значения n-го элемента списка. Например: в списке [three, one, two] второй элемент равен one. Напишите, пожалуйста полную программу.
Решение задачи: «Нахождение n-го элемента списка»
textual
Листинг программы
domains
list = string*
predicates
nth(integer, list, string)
clauses
nth(1, [X|_], X).
nth(N, [_|T], X) :-
NN = N - 1,
nth(NN, T, X).
goal
L = [one, two, three],
write(L), nl,
write("N: "),
readint(N),
nth(N, L, X),
write(X), nl.
Объяснение кода листинга программы
domains- определение типа данных для переменных в коде. В данном случае, список представлен как строка из элементов.predicates- определение функции (предиката)nth, которая принимает три аргумента: целое числоN, списокLи возвращает строкуX.clauses- определение правил (условий) для функцииnth. Первое правило говорит, что еслиNравно 1, то функция возвращает первый элемент спискаL. Второе правило говорит, что еслиNбольше 1, то функция рекурсивно вызывает саму себя, уменьшаяNна 1, и объединяет результат с последним элементом спискаT.goal- определение начальной информации и действий, которые должны быть выполнены. Создается списокLсо значениями[one, two, three]. Затем этот список выводится на экран, после чего пользователю предлагается ввести целое числоN. После ввода числа, вызывается функцияnthс аргументамиNиL, и результат выводится на экран.