examples/zebra-wam.lisp @ f1ef8f905a1d
Split functor cells into separate functor and arity cells This lets us keep everything we need for unification right in the contiguous main store array. It also makes GC a bit easier to deal with, because all the references to things outside the WAM are kept in basically one place.
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Sat, 16 Jul 2016 01:34:04 +0000 |
| parents | 1411666a60f8 |
| children | (none) |
(in-package #:bones.wam) (reset-database) (push-logic-frame) (fact (member ?item (list* ?item ?))) (rule (member ?item (list* ? ?rest)) (member ?item ?rest)) (rule (next-to ?x ?y ?list) (in-order ?x ?y ?list)) (rule (next-to ?x ?y ?list) (in-order ?y ?x ?list)) (fact (in-order ?x ?y (list* ?x ?y ?))) (rule (in-order ?x ?y (list* ? ?rest)) (in-order ?x ?y ?rest)) (rule (= ?x ?x)) (rule (zebra ?houses ?water-drinker ?zebra-owner) ;; Houses are of the form: ;; (HOUSE ?country ?pet ?cigarette ?drink ?color) (= ?houses (list (house norway ? ? ? ?) ? (house ? ? ? milk ?) ? ?)) (member (house england ? ? ? red ) ?houses) (member (house spain dog ? ? ? ) ?houses) (member (house ? ? ? coffee green ) ?houses) (member (house ukraine ? ? tea ? ) ?houses) (member (house ? snails winston ? ? ) ?houses) (member (house ? ? kools ? yellow) ?houses) (member (house ? ? lucky-strike orange-juice ? ) ?houses) (member (house japan ? parliaments ? ? ) ?houses) (in-order (house ? ? ? ? ivory ) (house ? ? ? ? green ) ?houses) (next-to (house ? ? chesterfield ? ? ) (house ? fox ? ? ? ) ?houses) (next-to (house ? ? kools ? ? ) (house ? horse ? ? ? ) ?houses) (next-to (house norway ? ? ? ? ) (house ? ? ? ? blue ) ?houses) (member (house ?water-drinker ? ? water ?) ?houses) (member (house ?zebra-owner zebra ? ? ?) ?houses)) (finalize-logic-frame) (time (query-all (zebra ?houses ?water ?zebra))) ; (declaim (optimize (speed 3) (safety 0)))