examples/zebra-wam.lisp @ 9c72baeb00f9
Add tests from TAOP section 2.2
author |
Steve Losh <steve@stevelosh.com> |
date |
Sat, 23 Jul 2016 20:38:21 +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)))