malo poglej program.... ;) tist assert(d(X)) je totalno nelogicen... saj
assertas argument katerega isces... tu more biti assertan pac rep od
seznama.
tako da delujoca verzija tega programa je naslednja:
imember(X, L):-
L \== [],
assert(d(L)),
repeat,
retract(d([H|T])),
(X = H;
T = [], !, fail;
assert(d(T)), fail).
---------- Forwarded message ----------
From: Rok Carl <[EMAIL PROTECTED]>
Date: 2008/6/17
Subject: Re: [Friclist] PPJ
To: FRIClist <[email protected]>
A razume mogoče kdo tole prolog nalogo (na enem izpitu je bla):
2) iterativni INC - povečati za 1 vsak element seznama.
Zdej v vajah sm našu eno rešitev za iterativni member, ampak ne dela, kot bi
mogla, tud če v vrstici "T = [], !, fail;" znak in (,) zamenjate za ali (;).
imember(X, L):-
L \== [],
assert(d(L)),
repeat,
retract(d([H|T])),
(X = H;
T = [], !, fail;
assert(d(X)), fail).
Mislim, kapiram ta iterativni koncept, sam problem že pr tej implementaciji
je, kok se boš premiku po array-u. Ta ti bo namreč na imember(a, [a,b,b])
reku yes (tak ko treba), na imember(a, [b,a,b]) pa no.
Komu jasno?
--
Lp,
Jernej