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)))