faster-minikanren
faster-minikanren copied to clipboard
A fast implementation of miniKanren with disequality and absento, compatible with Racket and Chez.
Now that racket is on top of Chez is there room to remove some of these mk-specific compatibility layer prims? https://github.com/michaelballantyne/faster-minikanren/blob/910fbea468d57c811b85e3e365e27f5e2d9dc2ba/private-unstable.rkt#L10-L38
It should help us avoid some occurs checks. Consider: ``` (define-relation (foo x y) (symbolo x) (== x y)) ``` In the case where `y` is a very large list,...
It seems like we might be able to get away with only watching one side of the disequality, now.
Add a version of unification that omits the occurs check.
When given an existing variable name in a pattern, matche appears to treat it as a new variable. Example: ``` (run 2 (q r) (matche (r) (((Foo ,q))) (((Bar ,q))))...
`succeed` and `fail` are used in The Reasoned Schemer, it seems reasonable to provide them. The book also uses the reader syntax `#s` and `#u`, which might be interesting to...
https://github.com/michaelballantyne/faster-minikanren/blob/dc5390aca787e7c40177c420171715d728fdb65a/mk.scm#L573 `x`
https://github.com/michaelballantyne/faster-minikanren/blob/dc5390aca787e7c40177c420171715d728fdb65a/mk.scm#L565-L571 When `term` is a pair such as `(,x . ,x)`, the result would include two instances of the var. Not sure if this would lead to bad reification later...