Yep makes sense, thanks. This is definitely a different way of thinking, really fun stuff!
On Tuesday, February 25, 2014 5:28:30 PM UTC-5, William Byrd wrote: > > Glad it helped! > > Reordering of conde clauses (that is, re-ordering of disjuncts) is > always "safe" in terms of divergence/looping versus finite > failure/finite termination, although the running time could change > dramatically (milliseconds vs. billions of years). This isn't true of > conjuncts in miniKanren (top-level goals in a fresh or run, and goals > within an individual conde clause); reordering conjuncts can change a > run* that terminates into one that loops forever, or vice versa. In > general, you want goals that have the possibility of "failing fast" to > come first. For example, calls to == or =/= should always come before > calls to recursive goals that might produce an unbounded number of > answers. > > The canonical example is something like: > > (run 1 (q) (== 5 6) (fooo q)) > > where 'fooo' is a goal that succeeds an unbounded number of times. > This run 1 will immediately return (), indicating that there are no > answers. However, the logically equivalent program > > (run 1 (q) (fooo q) (== 5 6)) > > will loop forever, looking for the non-existent first answer. This is > because the call to fooo will succeed, (== 5 6) will fail, fooo will > be tried again and will succeed, (== 5 6) will fail again, ... > > Does that make sense? > > On Tue, Feb 25, 2014 at 3:11 PM, Steve Olsen > <[email protected]<javascript:>> > wrote: > > Thanks a lot, this is very helpful! > > > > The reordering of goals makes a lot of sense. I wasn't thinking about > > efficiency and was mostly operating under the assumption that the order > of > > rules didn't matter. I guess in practice of course that is important. > > > > During my development I was running into some problems where I knew > there > > was only one answer and I would get it if I did run 1 but when I did > run* it > > would run forever. I'm guessing that had something to do with rule order > > too. I'm not sure exactly what the situation was though. > > > > I also still feel like there must be a way to do it with only one > > environment var. If there was a way to say, this is a member of this > list or > > something like that. > > > > This is actually a preliminary step in a weird game Idea I'm hacking out > > where you write some first-order logic rules that fly rocket ships > around. I > > think I'll need to write a meta interpreter around this that will let me > > return some error messages to the user when there's more than one > solution > > or two rules conflict or whatever. I'll have to tackle that when I'm a > bit > > further on though. > > > > > > On Tuesday, February 25, 2014 4:14:02 PM UTC-5, William Byrd wrote: > >> > >> Take a look at this: > >> > >> https://gist.github.com/webyrd/9217893 > >> > >> On Tue, Feb 25, 2014 at 1:56 PM, Steve Olsen <[email protected]> > wrote: > >> > Either of those would be great. Whichever you prefer. > >> > > >> > > >> > On Tuesday, February 25, 2014 3:38:40 PM UTC-5, William Byrd wrote: > >> >> > >> >> Okay, I understand all of the code. What would be the best way to > >> >> give you feedback? Show you the changes I'd make to the code? > >> >> High-level text? > >> >> > >> >> On Tue, Feb 25, 2014 at 12:24 PM, Steve Olsen <[email protected]> > >> >> wrote: > >> >> >> Your environment associates symbols to logic variables > representing > >> >> >> truth values? Is that correct? > >> >> > > >> >> > > >> >> > Yes > >> >> > > >> >> > -- > >> >> > You received this message because you are subscribed to the Google > >> >> > Groups > >> >> > "minikanren" group. > >> >> > To unsubscribe from this group and stop receiving emails from it, > >> >> > send > >> >> > an > >> >> > email to [email protected]. > >> >> > To post to this group, send email to [email protected]. > >> >> > Visit this group at http://groups.google.com/group/minikanren. > >> >> > For more options, visit https://groups.google.com/groups/opt_out. > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "minikanren" group. > >> > To unsubscribe from this group and stop receiving emails from it, > send > >> > an > >> > email to [email protected]. > >> > To post to this group, send email to [email protected]. > >> > Visit this group at http://groups.google.com/group/minikanren. > >> > For more options, visit https://groups.google.com/groups/opt_out. > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "minikanren" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to [email protected] <javascript:>. > > To post to this group, send email to > > [email protected]<javascript:>. > > > Visit this group at http://groups.google.com/group/minikanren. > > For more options, visit https://groups.google.com/groups/opt_out. > -- You received this message because you are subscribed to the Google Groups "minikanren" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/minikanren. For more options, visit https://groups.google.com/groups/opt_out.
