I couldn't help but overhear that you're working with Constraint
Programming, so I thought I'd suggest that you try loco
<http://github.com/aengelberg/loco>, which is a Clojure wrapper of a Java
library specifically designed to work with these types of problems.
The loco solution to your problem would look like this:
(use 'loco.core 'loco.constraints)
(solutions [($in :x 0 100)
($in :y 0 100)
($= ($+ ($* :x 2)
($* :y 3))
8)])
=> ({:y 0, :x 4} {:y 2, :x 1})
While loco doesn't free you from all the limitations you previously had
(like having to specify arbitrarily large domains), it might be a better
choice than core.logic in this case because I think it's more elegant to
write problems, and it's much faster. (I wrote the library so I'm a bit
biased.)
On Tuesday, June 10, 2014 8:32:33 AM UTC-7, David Nolen wrote:
>
> That's that's the suggested way - just pick a large bound.
>
> David
>
> On Tue, Jun 10, 2014 at 11:28 AM, cej38 <[email protected] <javascript:>>
> wrote:
> > I found the solution to my first problem at
> > https://github.com/clojure/core.logic/wiki/Features (with a few small
> > changes by me):
> >
> > (run* [q]
> > (fresh [x y]
> > (fd/in x y (fd/interval 0 9))
> > (fd/eq
> > (= (+ (* x 3) (* y 2)) 8))
> > (== q [x y])))
> >
> >
> > I suppose that I could set (fd/interval 0 999999999) to do a fair
> > approximation of the non-negative integers, but out of curiosity, would
> > there be a better way of doing this?
> >
> >
> >
> > On Tuesday, June 10, 2014 11:12:11 AM UTC-4, cej38 wrote:
> >>
> >> I am interested in solving a simple equation for all of its solutions
> when
> >> some constraints are applied. This sounds like a problem for
> core.logic.fd.
> >>
> >> Let's use a toy example:
> >>
> >> 8 = 3*x + 2*y, where x and y must be non-negative integers.
> >>
> >> Here are the possible solutions: [x,y]= {[2,1],[0,4]}.
> >>
> >>
> >> I tried something like this:
> >>
> >> (run* [q]
> >> (fresh [x y]
> >> (== q [x y])
> >> (project [x y]
> >> (fd/+ (* x 2) (y 3) 8))))
> >>
> >> But I get a exception:
> >> "java.lang.ClassCastException: clojure.core.logic.LVar cannot be cast
> to
> >> java.lang.Number"
> >>
> >> So I have two questions:
> >> 1. How should I rewrite the above command to get the solutions?
> >> 2. Are there any good blog posts/online presentations/etc. on
> >> core.logic.fd?
> >>
> >>
> >>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to [email protected]
> <javascript:>
> > Note that posts from new members are moderated - please be patient with
> your
> > first post.
> > To unsubscribe from this group, send email to
> > [email protected] <javascript:>
> > For more options, visit this group at
> > http://groups.google.com/group/clojure?hl=en
> > ---
> > You received this message because you are subscribed to the Google
> Groups
> > "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an
> > email to [email protected] <javascript:>.
> > For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.