These are good questions, I've been going through a similar experience again recently. Initially confusing tabling with core.logic's pldb implementation, and the ^:index metadata flags.
I've been really enjoying using core.logic, but the lack of documentation and doc strings leaves you constantly guessing. In particular it makes it hard to know what functions are part of the logic programming API and what are part of the implementation. I suspect some are both, for interrop scenarios etc. The approach I and I think others have taken is to leverage the minikanren literature & papers, along with the excellent Reasoned Schemer. As far as I've seen core.logic implements most of this stuff, so you can find the equivalent and use it. This said, it would clearly help to have better documentation in core.logic. I'd offer to help in this regard, but I'm a beginer here myself. Regarding tabling have you looked at W. Byrds thesis, it covers it: https://github.com/webyrd/dissertation-single-spaced/raw/master/thesis.pdf R. On Saturday, 8 September 2018 21:11:16 UTC+1, Gordon Gustafson wrote: > > I've found these, but I'm still a little confused: > https://github.com/clojure/core.logic/wiki/Tabling > https://github.com/clojure/core.logic/wiki/Features#user-content-tabling > https://clojuredocs.org/clojure.core.logic/tabled > > 1. What exactly is tabling for? Is it for helping programs terminate, or > is it a performance optimization? > 2. Can it be used to 'cache' the results of a goal that's expensive to > compute? > 3. Are there any more examples of how to use tabling, particularly > ^:tabled with the defne/defna/defnu forms? > -- 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 https://groups.google.com/group/minikanren. For more options, visit https://groups.google.com/d/optout.
