[Fwd: Re: [cells-devel] Logic Programming in Cells]
Thomas F. Burdick
tfb at OCF.Berkeley.EDU
Tue May 24 17:48:42 UTC 2005
Kenny Tilton writes:
> So the generator sits there trying different values, with nested
> generators each working thru their values? The generator needs to be
> able to keep track of where it is between evaluations, including knowing
> when it is starting a fresh search (if you will).
Yep. I'm envisioning a generator doing things like producing
permutations or counting or working its way through a database cursor.
Knuth will be useful here. I'm thinking a generator has an internal
state which is initialized by a rule, but can be set by the
generator's formula. In the case where the generator is reevaluated
because something under it FAILed, the state is not reinitialized.
> Are you up to speed on the new propagation scheme, as featured most
> prominently in "unfinished-business"? I guess teh good news is that
> propagation to dependent cells completes before any output is done, so
> you do not have to back out outputs (and rules are not supposed to have
> side effects, tho I did just that in the Dwo Jones use case <gasp>.).
Yeah, the new propagation scheme is really the reason I thought of
doing this in Cells itself; it should make it easier to handle at the
Cells level.
> But what about the dependency propagation itself? A retry by the
> Generator may not propagate to the same population, so some positive
> mechanism must un-calculate dependencies reached during any failed
> propagation.
Yeah, I'm hoping this isn't too hard.
> Too bad I am not using the stack any more....Just had an
> idea. I need to look at the logic again, but what if we let dependency
> propagation take place on the stack. One nice thing here is that I was
> just about to /fake/ a stack just for debugging purposes, so I could
> figure out where problematic data pulses were originating. So either we
> do not need to do that, or that supports the backtracking you will need.
>
> Again, have you been thinking about these issues? Either way, am I in
> the right ballpark approach-wise?
You're pretty much right-on. I was going to look hard at the
propagation code to figure out whether to use the control stack, or
hand-manage a stack of my own. If it uses tail-calls in the case
where there are no backtracking points and *debug* is nil, it should
be possible to avoid excessive stack use in the normal case, at least
for high-quality CLs.
More information about the cells-devel
mailing list