Как удалить дубликаты в Прологе
Prolog — это декларативный язык программирования, обычно используемый в исследованиях искусственного интеллекта и лингвистики. В отличие от более распространенных процедурных языков, большинство программ на Прологе определяются как ряд правил и уравнений, а не как ряд шагов. Следующий код описывает процесс удаления дубликатов из списка в Прологе.
Шаг 1
Откройте текстовый редактор, например Блокнот, и сохраните файл под именем «remove_dups.pl».
Шаг 2
Введите код между косыми чертами (без косых черт):
/ % remove_dups(+List, -NewList):% Новый список привязан к списку, но с удаленными повторяющимися элементами. remove_dups([], []).
remove_dups([First | Rest], NewRest):- member(First, Rest), remove_dups(Rest, NewRest).
remove_dups([First | Rest], [First | NewRest]):– not(member(First, Rest)), remove_dups(Rest, NewRest). /
Функция «remove_dups» определяется как набор из трех правил. Первое правило ("remove_dups([],[].)") указывает, что если список пуст, ничего делать не нужно; функция должна просто вернуться. Второе правило указывает, что если первый элемент в списке появляется где-либо еще в списке, то он должен быть удален (поскольку это дубликат) и обработка должна продолжаться с использованием остальной части списка путем повторного вызова функции remove_dups с первым элементом. в списке опущены. Последнее правило указывает, что если первый элемент списка отсутствует где-либо еще в списке, он должен быть сохранен, а обработка должна быть продолжена.
Шаг 3
Сохраните свою работу, нажав «Ctrl» и «S» вместе.
Совет
В то время как такие языки, как C и Java, обычно решают проблемы с помощью итерационных циклов, декларативные и функциональные языки, такие как Prolog, обычно решают проблемы рекурсивно или путем многократного вызова одной и той же функции для все меньшего и меньшего набора общих данных. Некоторые проблемы гораздо проще решить с помощью рекурсии, хотя программистам, привыкшим использовать для решения проблем только итерационные циклы, может быть сложно научиться этому.