Hello Will,

thanks for your suggestion.
Your solution looked convincing to me,
but when I try e.g.

(amb list (list 1 2 3 4))

it's not evaluated to the desired

1 2 3 4,

but to

1.

I think the problem is that the recursion doesn't work,
because if in

(amb (car list)

           (amb-list (cdr list)))))


the first line doesnt' lead to a fail,
then the second line isn't evaluated.

greetings,
Stefan





Am 12.09.2010 20:16, schrieb Will M. Farr:
Stefan,

amb is a macro that chooses among the results of evaluating the expressions it 
is provided, so

(amb *someList*)

evaluates *someList*, resulting in a list, and chooses that.  You could define 
a function

(define (amb-list list)
   (if (null? list)
       (amb)
       (amb (car list)
            (amb-list (cdr list)))))

It's also possible that the amb library provides such a function, which may be 
implemented more efficiently; I don't know which amb library you're using, so I 
can't help you there.

Note that the simple solution of using

(apply amb *someList*)

will fail, since amb is a macro, not an ordinary function.  Good luck!

Will

On Sep 12, 2010, at 9:16 AM, Stefan Busch wrote:

Hello racket community,

though it may be impolite to enter the community with a wish,
I'd like to ask for help with the following problem:


I want a and b to "run through" all elements of two given lists,
and then to catch the combinations that fullfill a desired condition with
an "amb-assert" statement.

If I try this in the following way

(amb-collect
(let ((a (amb *someList*)
        (b (amb *someDifferentList*))...............

it turns out that not the list elemets are considered possible values for a or 
b,
but the lists themselves are treated as the only possible value.

In all examples I could find for the uage of "amb-collect" the values to run 
through were
recited, but in my case these are quite many, so would be grateful for a 
handier solution.

thanks,
Stefan







_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users


_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to