Список положительных элементов списка - Prolog

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

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

Мне нужно решить такую задачу. Сформировать список L1 из элементов: минимальный среди положительных элементов всего списка L, минимальный среди положительных элементов из последних (n-1) элементов L и т.д. Как это сделать?
Я сделал так.
Листинг программы
  1. domains
  2. number = integer
  3. list = integer*
  4. predicates
  5. sort(list, list).
  6. cord(number, number).
  7. rel(number, list, list).
  8. sort1(list, list).
  9. clauses
  10. sort([], []).
  11. sort([X|T],S1) :- sort(T,S2), rel(X,S2,S1).
  12. rel(X,[Y|S1],[Y|S2]) :- cord(X,Y), !, rel(X,S1,S2).
  13. rel(X,S1,[X|S1]).
  14. cord(X,Y) :- X>Y.
  15. sort1([X|T],S1):-X<0, sort1(T,S1).
  16. sort1([X|S1],[X|K]):-sort1(S1,K).
  17. goal
  18. sort1([8,6,0,-5,3,9],S),
  19. write(S), nl.
Но отрицательные элементы не исчезли. Как правильно?

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

textual
Листинг программы
  1. task([],[]) :- !.
  2. task(X,[]) :- get_pos(X,[]),!.
  3. task(X,[H|Y]) :- get_pos(X,XP),head(XP,Q), min_elt(XP,Q,H),tail(X,1,XX),task(XX,Y).

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

Код решает задачу поиска списка положительных элементов списка. Он состоит из трех частей:

  1. Основной цикл, который выполняется до тех пор, пока не будет исчерпан список.
  2. Рекурсивный вызов, который вызывается для оставшейся части списка после удаления первого элемента.
  3. Рекурсивный вызов, который вызывается для оставшейся части списка после удаления последнего элемента. Вот список шагов, описывающих, что происходит в коде:
  4. Линейный поиск первого положительного элемента в списке.
  5. Если список пуст, то возвращается пустой список.
  6. Если список не пуст, то рекурсивно вызывается функция для оставшейся части списка после удаления первого элемента.
  7. Если список не пуст, то рекурсивно вызывается функция для оставшейся части списка после удаления последнего элемента.

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


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

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

8   голосов , оценка 4.25 из 5

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

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

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