Вывести все подмножества заданного множества на Prolog
Формулировка задачи:
Листинг программы
- domains
- ilist=integer*
- predicates
- next(ilist,ilist)
- normirovka(ilist,ilist).
- show(ilist,integer).
- showall(ilist).
- main.
- clauses
- normirovka([2,A|Tail],[0|NewTail]):-A1=A+1,normirovka([A1|Tail],NewTail).
- normirovka([H|Tail],[H|Tail]):-H<2.
- next([H|Tail],Next):-H1=H+1,normirovka([H1|Tail],Next).
- show([],_).
- show([1|Tail],I):-write(I," "),I1=I+1,show(Tail,I1).
- show([0|Tail],I):-I1=I+1,show(Tail,I1).
- showall(Temp):-not(next(Temp,_)),!,show(Temp,0),nl.
- showall(Temp):-show(Temp,0),nl,next(Temp,Next),showall(Next).
- main:-showall([0,0,0]). %тут количество нулей равно n
- goal
- main.
Решение задачи: «Вывести все подмножества заданного множества на Prolog»
textual
Листинг программы
- normirovka([2, A|Tail], [0|NewTail]) :-
- A1 is A+1,
- normirovka([A1|Tail], NewTail).
- normirovka([H|Tail], [H|Tail]) :-
- H<2.
- next([H|Tail], Next) :-
- H1 is H+1,
- normirovka([H1|Tail], Next).
- show([], _).
- show([1|Tail], I) :-
- write(I),
- write(" "),
- I1 is I+1,
- show(Tail,I1).
- show([0|Tail], I) :-
- I1 is I+1,
- show(Tail, I1).
- showall(Temp) :-
- not(next(Temp,_)),
- !,
- show(Temp,0),
- nl.
- showall(Temp) :-
- show(Temp,0),
- nl,
- next(Temp,Next),
- showall(Next).
- main :-
- showall([0,0,0]). %тут количество нулей равно n
- ?- main.
Объяснение кода листинга программы
В этом коде используется рекурсивная функция для генерации всех подмножеств заданного множества. Вот список функций и их назначений:
- normirovka/2 - Эта функция используется для нормализации входных данных. Она добавляет единицу к каждому элементу входного списка, кроме последнего.
- next/2 - Эта функция используется для перехода к следующему элементу в списке. Она увеличивает текущий элемент на единицу и вызывает функцию normirovka для обработки нового элемента.
- show/2 - Эта функция используется для отображения подмножеств. Она записывает текущий элемент и затем вызывает себя для обработки следующего элемента.
- showall/1 - Эта функция используется для отображения всех подмножеств. Она вызывает функцию show для пустого списка и затем рекурсивно вызывает себя для следующего подмножества.
- main/0 - Это точка входа в программу. Она вызывает функцию showall с аргументом [0,0,0], что означает
вывести все подмножества из трех элементов
. Таким образом, этот код генерирует и выводит все подмножества из заданного множества.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д