Вывести все подмножества заданного множества на Prolog

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

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

Есть код, но он почему-то не запускается под ideone. С прологом имею дело первый и, надеюсь, последний раз. Прошу Вашей помощи!

Решение задачи: «Вывести все подмножества заданного множества на 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.

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

В этом коде используется рекурсивная функция для генерации всех подмножеств заданного множества. Вот список функций и их назначений:

  1. normirovka/2 - Эта функция используется для нормализации входных данных. Она добавляет единицу к каждому элементу входного списка, кроме последнего.
  2. next/2 - Эта функция используется для перехода к следующему элементу в списке. Она увеличивает текущий элемент на единицу и вызывает функцию normirovka для обработки нового элемента.
  3. show/2 - Эта функция используется для отображения подмножеств. Она записывает текущий элемент и затем вызывает себя для обработки следующего элемента.
  4. showall/1 - Эта функция используется для отображения всех подмножеств. Она вызывает функцию show для пустого списка и затем рекурсивно вызывает себя для следующего подмножества.
  5. main/0 - Это точка входа в программу. Она вызывает функцию showall с аргументом [0,0,0], что означает вывести все подмножества из трех элементов. Таким образом, этот код генерирует и выводит все подмножества из заданного множества.

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


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

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

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