[plt-scheme] Re: problem with backtracking order of nested ambs

From: Sigrid (keydana at gmx.de)
Date: Tue Oct 6 07:38:46 EDT 2009

Hi Chongkai,

this would be great if it worked also in case the first amb fails...
but it seems it doesn't:


(let ((x (amb 3 5 7)))
   (assert (even? x))
   (amb x 77))

 Amb tree exhausted

It seems it justs hangs after the first amb and never tries the second
- which is exactly what I have to avoid...



On 5 Okt., 23:03, Chongkai Zhu <c... at cs.utah.edu> wrote:
> Maybe you want something like:
>
> (let ((x (amb 3 5 4)))
>    (assert (even? x))
>    (amb x 77))
>
> Chongkai
>
>
>
> keyd... at gmx.de wrote:
> > Hi all,
>
> > I have a problem with the backtracking order of nested ambs which
> > makes that I cannot get the result I need. I've made up a dummy example:
>
> >  (let ((x (amb 3 5 4)))
> >    (let ((result (amb (begin (assert (even? x)) x) 77)))
> >      result))
>
> > I would need amb to first try all of '(3 5 4) and only after that,
> > take 77 as last possible way out.
>
> > In practice, I want to generate a list with amb, then check if every
> > item is unique, if not, try all other possible ways to compose the
> > list - and only there's no way to get it unique,
> > decide that "ok, nearly unique is fine too", such that 2 elements may
> > be the same, so try and assert that... and so on, until I can be sure
> > that at least the program will not fail,
> > not producing any results at all.
>
> > I'd be glad for any hints what I'm doing wrong here...
>
> > Thanks a lot in advance,
> > Sigrid
>
> > _________________________________________________
> >  For list-related administrative tasks:
> >  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> _________________________________________________
>   For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme


Posted on the users mailing list.