Список положительных элементов списка - Prolog
Формулировка задачи:
Мне нужно решить такую задачу.
Сформировать список L1 из элементов: минимальный среди положительных элементов всего списка L, минимальный среди положительных элементов из последних (n-1) элементов L и т.д.
Как это сделать?
Но отрицательные элементы не исчезли. Как правильно?
Я сделал так.
Листинг программы
- domains
- number = integer
- list = integer*
- predicates
- sort(list, list).
- cord(number, number).
- rel(number, list, list).
- sort1(list, list).
- clauses
- sort([], []).
- sort([X|T],S1) :- sort(T,S2), rel(X,S2,S1).
- rel(X,[Y|S1],[Y|S2]) :- cord(X,Y), !, rel(X,S1,S2).
- rel(X,S1,[X|S1]).
- cord(X,Y) :- X>Y.
- sort1([X|T],S1):-X<0, sort1(T,S1).
- sort1([X|S1],[X|K]):-sort1(S1,K).
- goal
- sort1([8,6,0,-5,3,9],S),
- write(S), nl.
Решение задачи: «Список положительных элементов списка»
textual
Листинг программы
- task([],[]) :- !.
- task(X,[]) :- get_pos(X,[]),!.
- task(X,[H|Y]) :- get_pos(X,XP),head(XP,Q), min_elt(XP,Q,H),tail(X,1,XX),task(XX,Y).
Объяснение кода листинга программы
Код решает задачу поиска списка положительных элементов списка. Он состоит из трех частей:
- Основной цикл, который выполняется до тех пор, пока не будет исчерпан список.
- Рекурсивный вызов, который вызывается для оставшейся части списка после удаления первого элемента.
- Рекурсивный вызов, который вызывается для оставшейся части списка после удаления последнего элемента. Вот список шагов, описывающих, что происходит в коде:
- Линейный поиск первого положительного элемента в списке.
- Если список пуст, то возвращается пустой список.
- Если список не пуст, то рекурсивно вызывается функция для оставшейся части списка после удаления первого элемента.
- Если список не пуст, то рекурсивно вызывается функция для оставшейся части списка после удаления последнего элемента.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д