|
From: | Alexandre Saidi |
Subject: | Re: determinism |
Date: | Mon, 12 Feb 2007 19:34:28 +0100 |
User-agent: | Mozilla Thunderbird 1.0.2 (X11/20050317) |
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 : -- Aleksander S. Saidi Maître de Conférences Ecole Centrale de Lyon Département Mathématiques-Informatique Mél : address@hidden Tél : 04.72.18.65.30, Fax : 04.78.33.16.15 |
Alexandre.Saidi.vcf
Description: Vcard
[Prev in Thread] | Current Thread | [Next in Thread] |