Выделить все одинаковые элементы списка в отдельный список - Prolog

Узнай цену своей работы

Формулировка задачи:

Дан список из 10 элементов. Выделить все одинаковые элементы списка в отдельный список

Решение задачи: «Выделить все одинаковые элементы списка в отдельный список»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
isIn(int,intl)
filt(int,intl,intl)
task(intl,intl)
 
clauses
isIn(_,[])    :- fail.
isIn(N,[N|_]).
isIn(N,[K|T]) :- N<>K, isIn(N,T).
 
filt(_,[],[]).
filt(N,[N|T],[N|R]) :- filt(N,T,R).
filt(N,[M|T],R) :- N<>M, filt(N,T,R).
 
task([],[]).
task([N|T],R) :- isIn(N,T), filt(N,[N|T],R), !.
task([_|T],R) :- task(T,R), !.

Объяснение кода листинга программы

В коде используется язык программирования Prolog.

  1. В первой строке объявлены два домена: int - целочисленный тип данных, и intl - указатель на список целочисленных значений.
  2. Затем объявлены три предиката: isIn - проверяет наличие элемента в списке, filt - фильтрует список, оставляя только уникальные элементы, task - основная функция, выполняющая задачу.
  3. В блоке clauses для предиката isIn реализована логика проверки наличия элемента в списке. Если элемент отсутствует в списке, то вызывается fail.
  4. Для предиката filt реализованы три случая: пустой список, список с одним элементом и список с несколькими элементами.
  5. В блоке clauses для предиката task реализована логика выполнения задачи. Если элемент найден в списке, то он фильтруется и добавляется в результирующий список.
  6. В конце кода объявлена функция task, которая принимает на вход два списка и возвращает результирующий список.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы