Stop using the fill pointer for the stack
This is ugly, but it had to be done. Shit gets too crazy once you introduce
choice points. We'll just have to manage our own memory. Ugh.
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 20 Apr 2016 17:13:31 +0000 |
parents |
ae2b13a9a629 |
children |
(none) |
(in-package #:bones.paip)
(clear-db)
(rule (member ?item (?item . ?)))
(rule (member ?item (? . ?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))
(rule (in-order ?x ?y (?x ?y . ?)))
(rule (in-order ?x ?y (? . ?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
((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))
(time (query-all (zebra ?houses ?water ?zebra)))
; (declaim (optimize (speed 3) (safety 0)))