glavni funktor je vedno tisti z najvisjo stevilko prioritete, + in -
imata enako, sta pa definirana oba kot yFx.

yFx je kljucen, to pomeni da je na levi strani lahko izraz ki ima
enako prioriteto, na desni pa mora imeti manjso; v praksi to pomeni,
da se v izrazu z vec plusi ali minusi vedno sesteva z leve (dno
drevesa), konca pa na desni (tam je koren drevesa in glavni funktor).

zato je spodnji izraz enak "-( +(a,b), *(2,c) )" - na levi strani
imamo izraz +(a,b), zato ker je na levi strani lahko argument z isto
priroteto.
in iz istega razloga izraz "+(a, -(b, 2*c) )" ni mogoc, ker ima na
desni strani izraz -(b, 2*c) ki ima isto prioriteto; to pa po
definiciji operatorja ne more biti, saj je + definiran z yFx; ce bi
bil xFy bi pa slo.

se enkrat: v praksi je najlazje tko, da pomnozis najprej vse produkte,
potem pa imas samo clene z vmesnimi plusi in minusi, takrat pa zacnes
sestevati na levi in gres proti desni... ko zakljucis na desni, si pri
glavnem funktorju.


2008/6/22 gyga <[EMAIL PROTECTED]>:
> Ce naredim tole
>
> functor(a + b - 2 * c, F, A).
>
> dobim
> F=-,
> A=2;
> se pravi ne gleda prvega znaka.
> 2008/6/22 Miha Cerar <[EMAIL PROTECTED]>:
>
>> hm, sem mal gledal tole:
>>
>> http://books.google.si/books?id=0YtoWjWaCAoC&pg=PA162&lpg=PA162&dq=prolog+predicate+functor&source=web&ots=1Xp33bL9iR&sig=0VMs4gT3SSlQVPzkVaXnMxHk5Tg&hl=en&sa=X&oi=book_result&resnum=3&ct=result#PPA162,M1
>>
>> sedaj bolj razumem, čeprav mi ni ravno jasno kako gleda to..
>>
>> lp
>>
>> 2008/6/22 gyga <[EMAIL PROTECTED]>:
>>
>> > Verjetno zato, ker pobere prvega. To je +.
>> >
>> > Se motim?
>> >
>> > 2008/6/22 Miha Cerar <[EMAIL PROTECTED]>:
>> >
>> > >  Zakaj je tukaj : functor(a + b + 2 * c, F, A). - glavni funktor +
>> (beri:
>> > > plus)?
>> > > torej dobimo
>> > > F=+,
>> > > A=2;
>> > >
>> > > lp
>> > >
>> > > 2008/6/22 Matjaz Horvat <[EMAIL PROTECTED]>:
>> > >
>> > > > Ta del je potem kvečjemu:
>> > > >
>> > > > integer(X), X<=9, X>=9;
>> > > > atom(X), member(X, [a,b,c,d,e,f]).
>> > > >
>> > > > lpM
>> > > >
>> > > > 2008/6/22 Miha Cerar <[EMAIL PROTECTED]>:
>> > > >
>> > > > > ne, v seznamu mankajo še št. od 0-9, al pa pomoje če bi se naredil,
>> > da
>> > > če
>> > > > > je
>> > > > > integer(X)<9.
>> > > > >
>> > > > > 2008/6/22 Matjaz Horvat <[EMAIL PROTECTED]>:
>> > > > >
>> > > > > > 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