Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> comp.databases.theory -> Re: Counting propositions
"Bart Demoen" <bmd_at_cs.kuleuven.ac.be> wrote in message
news:1087559272.660474_at_seven.kulnet.kuleuven.ac.be...
> x wrote:
>
> > p(1).
> > p(2).
> > p(3).
> >
> > s(X):-r(X,[]).
> >
> > r(R,L):-q(X,L),r(R,[X|L]).
> > r(L,L).
> >
> > q(X,L):-p(X), not(member(X,L)).
> >
> > member(X,[X|_]).
> > member(X,[_|L]):-member(X,L).
> >
> > It is possible to write a "pure" Prolog predicate that return the number
of
> > elements that make p(X) true ?
> > (without using findall, bagof, setof, assert, etc.)
> Is the following "pure" enough for you ?
I don't know. I have to think about it.
Is a cut hidden somewhere ?
> numberofs(N) :- alls(L,[]), length(L,N).
>
> alls(L,In) :-
> (s(X), not(member(X,In)) ->
> alls(L,[X|In])
> ;
> L = In
> ).
I think you wrote s(X) by mistake instead of p(X). The solution is similar to the wrong code I posted.
I'm not familiar with the exact meaning of -> and ; Why the two "solutions" r(X,[]) and alls(X,[]) give different answers ?
> (the same was posted not long ago ...)
Sorry, I haven't watched comp.lang.prolog.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=