The `-relevant?` implementation for `<=fdc` was wrong. If we have two singleton domains we just check that they are not <= to each other. However we can also discard the constraint if we have `interval-<`. Added test case.
occur check is now set via field in Substitution, `oc`. `solve` -> `-run` and it takes an extra parameter now to set occurs-check. change the run macros to use `-run`. remove `lazy-run` no longer needed. update the benchmarks in bench.clj to use `doall` so we can time things properly.
add example from Ciao paper on CLP compilation to JS, looks like our disitinctfd constraint compares favorable to Ciao in this case.
`Substitution` type now has a new field `ts`, this holds an atom containing a hashmap. Normally this is nil, add `tabled-s` constructor function that will create a `Substitution` with this field set. `solve` now uses `tabled-s`. Removed old `table` fn, no longer needed. Fix `tabled` macro. Much more disciplined `swap!` usage. `tabled` goals macroexpand into fns with generated ids, these are used for the lookup in the `ts` field of `Substitution`. Related `swap!` fix to `master`.
Closing in on next beta release. Need to fix tabling and waiting a bit to see how the nominal logic work goes.
Needed to be bit more performance conscious in `==`. If there aren't any constraints, or if there aren't any changes - don't do anything! `zebrao` perf is now close to what it was before.
as suspected `treec` is not quite flexible enough. Instead we now have a higher order contraint `fixc` which takes a function which must take 3 arguments - the term, the substitution and a reifier. This function must return a goal. This goal can of course call fixc again recursively, perhaps using constrain-tree to get tree constraining behavior. Redefine `treec` in terms of `fixc` as an example :)
remove `creify`, change `-reify` to take a third parameter which is the reified name substitution. Pass the `x` parameter to the `cform` when it is a function.
It is like that people will want to reify usage of `treec` in whatever way they please. Change `treec` so that `pform` can be function. If a function then we pass the constraint, the reified constraint value, the constraint substitution, as well as the full substitution if there are values outside the constraint which should also be reified. Added `creify` which can take a value, the constraint substitution and the full substitution and do the right thing.
Add `treec` tests for maps and lcons.
Fix horrible argument order. Update docstring for `partial-map`, `partial-map` is no longer storable so cannot unify with logic vars. Added docstring to `featurec`. Added `featurec` tests.