Ваще не работает ^_^ - Prolog

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

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

Объясните почему не работает, задание было таким " Дан список, элементы которого — непустые бинарные деревья с числами в качестве вершин. Для каждого такого дерева выполнить преобразование дерева в список (в порядке обхода левый-голова-правый) и вывести результат в виде списка списков. Затем через пробел вывести минимальное значение среди всех элементов"" код такой

Решение задачи: «Ваще не работает ^_^»

textual
Листинг программы
DOMAINS
 
int=integer
tree=tr(int,tree,tree);empty
intl=int*
intll=intl*
tl=tree*
 
predicates
 
app(intl,intl,intl)
tree2list(tree,intl)
ltree(tl,intll)
minl(intl,int)
minll(intll,int)
 
 
clauses
 
app([],X,X).
app([H|T],X,[H|Y]) :- app(T,X,Y).
 
tree2list(empty,[]).
tree2list(tr(X,L,R),Z) :- tree2list(L,LL), tree2list(R,RR), app(LL,[X],T), app(T,RR,Z).
 
ltree([],[]).
ltree([T|TT],[Z|ZZ]) :- tree2list(T,Z), ltree(TT,ZZ).
 
minl([X],X).
minl([H|T],M) :- minl(T,M),M<H.
minl([H|T],H) :- minl(T,M),M>=H.
 
minll([X],Z) :- minl(X,Z).
minll([H|R],MH) :- minll(R,M),minl(H,MH),MH<M.
minll([H|R],M) :- minll(R,M),minl(H,MH),MH>=M.
 
goal
 
ltree([tr(5,empty,empty),tr(6,tr(1,empty,empty),tr(-8,empty,empty))
, tr(7,tr(8,empty,empty),empty)],U),
write(U),nl,minll(U,M),write(M),nl.

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

  1. Доменные имена:
    • int=integer
    • tree=tr(int,tree,tree);empty
    • intl=int*
    • intll=intl*
    • tl=tree*
  2. Предикаты:
    • app(intl,intl,intl)
    • tree2list(tree,intl)
    • ltree(tl,intll)
    • minl(intl,int)
    • minll(intll,int)
  3. Клаузы:
    • app([],X,X).
    • app([H|T],X,[H|Y]) :- app(T,X,Y).
    • tree2list(empty,[]).
    • tree2list(tr(X,L,R),Z) :- tree2list(L,LL), tree2list(R,RR), app(LL,[X],T), app(T,RR,Z).
    • ltree([],[]).
    • ltree([T|TT],[Z|ZZ]) :- tree2list(T,Z), ltree(TT,ZZ).
  4. Цель:
    • ltree([tr(5,empty,empty),tr(6,tr(1,empty,empty),tr(-8,empty,empty)) , tr(7,tr(8,empty,empty),empty)],U),
    • write(U),nl,minll(U,M),write(M),nl. В этом коде используется язык программирования Prolog. Код определяет доменные имена, предикаты и клаузы. Затем определяется цель, которая должна быть достигнута. В данном случае, цель заключается в том, чтобы вывести дерево в виде списка и минимальное значение из списка. Пожалуйста, обратите внимание, что этот код является предположительным и может потребовать дополнительной настройки или изменений, чтобы работать должным образом.

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


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

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

14   голосов , оценка 4.286 из 5