A ta 4. je ok:
http://www.e-studij.si/UL/FRI/UNI-RI/MOS/Izpiti/2007-12-10-prolog

A to pomeni da potem ni treba preverjati števil, ker so že zagotovo not?
Samo za atome je potrebno preveriti, da so a - e?

lpM

2008/6/22 Matjaz Horvat <[EMAIL PROTECTED]>:

> Hehe, saj res, s tole notacijo zgleda precej bolj optimalno, čeprav je
> vsebinsko rešitev ista.
>
> Hvala.
>
>
> lpM
>
> 2008/6/22 Uroš Jurglič <[EMAIL PROTECTED]>:
>
>> memberBT(X, b(_,X,_)).
>> memberBT(X, b(L,_,R)) :- memberBT(X, L) ; memberBT(X, R).
>>
>> hmm, kar je pravzaprav cist isto kot spodaj :)
>>
>> prvo pravilo: uspe, ce je X v node-u
>> drugo pravilo: uspe, ce je X ali v levem ali v desnem poddrevesu...
>> ce je L ali R nil se itak ne ujame na nobeno pravilo, saj ni oblike
>> b(...), tko da memberBT(X, nil) nikol ne uspe
>>
>> 2008/6/22 Matjaz Horvat <[EMAIL PROTECTED]>:
>> > 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
>> >> >> >> > > >>
>> >> >> >> > > >
>> >> >> >> > > >
>> >> >> >> > >
>> >> >> >> >
>> >> >> >
>> >> >>
>> >> >
>> >>
>> >
>>
>
>

Reply via email to