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

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

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

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

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

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. max(int,int,int)
  7. max_elt(intl,int)
  8. num_elt(intl,int,int,intl)
  9. task(intl,intl)
  10.  
  11. clauses
  12. max(A,B,B) :- B>A.
  13. max(A,B,A) :- A>=B.
  14.  
  15. max_elt([X],X).
  16. max_elt([H|T],M) :- max_elt(T,M1),max(H,M1,M).
  17.  
  18. num_elt([],_,_,[]).
  19. num_elt([P|T],P,N,[N|R]) :- N1=N+1,num_elt(T,P,N1,R).
  20. num_elt([P|T],Q,N,R)     :- P<>Q, N1=N+1,num_elt(T,Q,N1,R).
  21.  
  22. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы