Tale gotovo ni prav... Binarna drevesa so podana v obliki b(L, E, R), kjer sta L in R levo oziroma desno poddrevo, E pa element v vozlišču. Prazno drevo predstavlja simbol nil. Drevo z enim samim elementom je tako b(nil, E, nil). Napišite predikat memberBT(X, BT), ki z vračanjem vrne vse elemente X binarnega drevesa BT!
memberBT(X, b(L, X, R)). memberBT(X, b(L, _, R)):-memberBT(X,L). memberBT(X, b(L, _, R)):-memberBT(X,R). Se komu sanja kako se to reši? lpM 2008/6/22 Uroš Jurglič <[EMAIL PROTECTED]>: > evo tole deluje: > L=[7,1,12,7,8,1], conc(First,[X|_],L), findall(Y, (member(Y,First), > Y>X), LX), length(LX,0). > > btw: s setof ne dela, ker setof ne vrne praznega seznama, ampak > preprosto ne uspe... findall pa vedno uspe, ampak ko ni zadetkov vrne > prazen list. > > > > > 2008/6/21 Miha Cerar <[EMAIL PROTECTED]>: > > pomoje je potrebno kaj takega spravt v rekurzijo: > > ?- _L=[7,1,12,7,8,1], conc(_,[P,_B|_],_L),P>_B. > > delamo na tem :) > > > > > > > > 2008/6/21 Uroš Jurglič <[EMAIL PROTECTED]>: > > > >> kaj pa tole? > >> e) Z vračanjem poišči vse elemente seznama L, pred katerimi v seznamu > >> ni nobenega večjega elementa! (npr, v L = [7,1,12,7,8,1] sta taka > >> elementa 7 in 12)! > >> > >> 2008/6/21 Uroš Jurglič <[EMAIL PROTECTED]>: > >> > setof( X, A^B^(parent(X,A), parent(X,B), not(A=B), female(A), > >> > female(B)), L ), length(L, N). > >> > > >> > tole bi po logiki slo, nisem pa sprobal... > >> > > >> > > >> > 2008/6/21 Miha Cerar <[EMAIL PROTECTED]>: > >> >> > >> >> Mal resujem naloge, in ce gre se kdo..bi mogocel znal vprasat prolog > >> tole: > >> >> imate podano družinsko drevo (z relacijami parent ter male/female) > >> -koliko > >> >> ljudi ima več kot dve hčerki? > >> >> Znam izpisat št. vseh ki imajo hči, več pa ne .. > >> >> Anyone? > >> >> > >> >> lp > >> >> > >> >> 2008/6/21 Uroš Jurglič <[EMAIL PROTECTED]>: > >> >> > >> >> > Jaz tuki ne vidim nobene razlike, vsaj ce imas class takole > definiran: > >> >> > class(X, positive) :- X>0. > >> >> > class(X, negative) :- X<0. > >> >> > > >> >> > Potem gre pri splitu z rezom za 'zeleni rez' - ni deklarativne > >> razlike, je > >> >> > samo postopkovna (torej samo optimizacija). > >> >> > > >> >> > Ce pozenem obe verziji in da uporabim zgornjo definicijo class, > dobim > >> vedno > >> >> > isti rezultat in ne tko kot si ti napisal. Razen ce imas class kako > >> drugace > >> >> > definiran..? > >> >> > > >> >> > > >> >> > > >> >> > > >> >> > > >> >> > 2008/6/21 Miha Cerar <[EMAIL PROTECTED]>: > >> >> > > >> >> > > Še bolj postopkovno razloženo :) > >> >> > > > >> >> > > če ni reza dobiš tole: > >> >> > > > >> >> > > | ?- split([1,2,-3],P,L) . > >> >> > > L = [-3], > >> >> > > P = [1,2] ? ; > >> >> > > > >> >> > > L = [2,-3], > >> >> > > P = [1] ? ; > >> >> > > > >> >> > > L = [1,-3], > >> >> > > P = [2] ? ; > >> >> > > > >> >> > > L = [1,2,-3], > >> >> > > P = [] ? > >> >> > > > >> >> > > če pa je pa samo pravilno: > >> >> > > | ?- > >> >> > > split([1,2,-3],P,L) > >> >> > > . > >> >> > > > >> >> > > L = [-3], > >> >> > > P = [1,2] ? ; > >> >> > > > >> >> > > 2008/6/21 Miha Cerar <[EMAIL PROTECTED]>: > >> >> > > > >> >> > > > verzija brez reza lahko pri vračanju kliče cilj class(X, > >> >> > > positive/negative) > >> >> > > > ne glede na to, kakšen je X > >> >> > > > > >> >> > > > 2008/6/21 Matjaz Horvat <[EMAIL PROTECTED]>: > >> >> > > > > >> >> > > > REZ > >> >> > > >> split([],[],[]). > >> >> > > >> split([X|R],[X|R1],N):-class(X,positive),!, split(R,R1,N). > >> >> > > >> split([X|R],P,[X|R1]):-class(X,negative), split(R,P,R1). > >> >> > > >> > >> >> > > >> BREZ > >> >> > > >> split([],[],[]). > >> >> > > >> split([X|R],[X|R1],N):-class(X,positive), split(R,R1,N). > >> >> > > >> split([X|R],P,[X|R1]):-class(X,negative), split(R,P,R1). > >> >> > > >> > >> >> > > >> Najdite in razložite problem pri verziji brez reza (verzija > brez > >> reza > >> >> > > >> lahko > >> >> > > >> pri vračanju > >> >> > > >> kliče cilj class(X, positive/negative) ne glede na to, kakšen > je > >> X). > >> >> > > >> > >> >> > > >> V čem je torej problem, če ni reza? > >> >> > > >> > >> >> > > >> lpM > >> >> > > >> > >> >> > > > > >> >> > > > > >> >> > > > >> >> > > >> > > >> > > >
