Re: determinism

Alexandre Saidi <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
This may help :

- go/2 takes G and T. It copies G to G1 (no shared variable), calls G1
(hence G) and if success, next/3 will decide.

- next/3 retries G (hence G1) but if there is a solution different from
the first call (in go/2), then cuts and conludes on a failure.

Otherwise, next/3 takes the only solution into T.

- more_than_one is here to write some blabla.

Other 'write(...)' are also there for a trace.

Try it with :

go(p0(X), T).

go(p1(X), T).

go(p2(X), T).

go(p3(X), T).

Only go(p0(X), T). succeeds. Others will write things but fail.

PS : there is no try with an nonexistent predicat; you may set the
appropriate flag and try with that case also.

Cheers

Alex

------------------

go(G, T) :- copy_term(G,G1), call(G1), next(G,G1,T).
next(G,G1,T) :- G, G \== G1, !, more_than_one(G,G1,T).
next(_G,G1,T) :- T=G1, write('case one solution\n'). % succeed, only one solution.
more_than_one(_G,_G1,_T) :- write('case with more than one solution \n'), fail.

% ex for G with 0, 1 and more solutions.
p0(_):- fail. % zero solution for p0

p1(1). % one solution predicate

p2(1). % Two solutions for p2
p2(2).

p3(1). % 3 (or more) soultions
p3(2).
p3(3).

------------------------

michel levy a écrit :

Could you help
to write this program :

det(T,G) succeeds if and only if G succeeds once and only once and give
the T answer.

1) I don't want the solution below by findall, because I want to try at
most two back tracks on G.

det(T,G) :- findall(T,G,L),length(L,1)

2) I know already call_det but it's not the solution because G can have
choice points, but only one answer.

--
Aleksander S. Saidi
Maître de Conférences
Ecole Centrale de Lyon
Département Mathématiques-Informatique
Mél : [email protected]
Tél : 04.72.18.65.30, Fax : 04.78.33.16.15

_______________________________________________
Users-prolog mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/users-prolog
Alexandre.Saidi.vcf (text/x-vcard, 279 B)
begin:vcard
fn:A-S Saidi
n:A-S Saidi;A-S
org:Ecole Centrale de Lyon;LIRIS- UMR 5205 CNRS
email;internet:[email protected]
title;quoted-printable:Ma=C3=AEtre de Conf=C3=A9rences
tel;work:04 72 18 65 30
tel;fax:04 78 33 16 15
x-mozilla-html:TRUE
version:2.1
end:vcard
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.