Предикат, который формирует список из номеров максимальных элементов числового списка - Prolog

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

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

помогите пжлст. знаю только что в теории мы будет проходит сначала по списку и находит самый максимальный элемент, а потом будет брать запоминать в списке отдельном позиции. как реализовать проблемка, ступор какой - то

Решение задачи: «Предикат, который формирует список из номеров максимальных элементов числового списка»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
max(int,int,int)
max_elt(intl,int)
num_elt(intl,int,int,intl)
task(intl,intl)
 
clauses
max(A,B,B) :- B>A.
max(A,B,A) :- A>=B.
 
max_elt([X],X).
max_elt([H|T],M) :- max_elt(T,M1),max(H,M1,M).
 
num_elt([],_,_,[]).
num_elt([P|T],P,N,[N|R]) :- N1=N+1,num_elt(T,P,N1,R).
num_elt([P|T],Q,N,R)     :- P<>Q, N1=N+1,num_elt(T,Q,N1,R).
 
task(X,R) :- max_elt(X,M), num_elt(X,M,1,R).

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

  1. В коде используется язык программирования Prolog.
  2. Код решает задачу формирования списка из номеров максимальных элеменментов числового списка.
  3. Для этого в коде определены следующие предикаты:
    • max(A,B,C) - находит максимальное значение из чисел A и B и присваивает его переменной C.
    • max_elt(L, M) - находит максимальный элемент в списке L и присваивает его переменной M.
    • num_elt(L, N, R) - формирует список R из N-ных элементов списка L.
  4. В коде определены следующие функции:
    • task(L, R) - главная функция, которая находит максимальный элемент в списке L и формирует из его номера список R.
  5. В функции task(L, R) используется рекурсивный вызов функций max_elt(L, M) и num_elt(L, M, N, R).
  6. В функции max_elt(L, M) используется простой цикл для проверки каждого элемента списка L и нахождения максимального значения.
  7. В функции num_elt(L, N, R) используется рекурсивный вызов для формирования списка R из N-ных элементов списка L.
  8. В функции num_elt(L, N, R) также проверяется условие, что текущий элемент не равен предыдущему, чтобы избежать повторений в списке R.

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

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