# HG changeset patch # User Steve Losh # Date 1468349619 0 # Node ID a02637eeccca3f3869dd2878256fceda55ee3ebb # Parent 6adb44b99131b8c73955e68bdbd9b126fc9b1ee4 Add Hanoi test from tAoP diff -r 6adb44b99131 -r a02637eeccca test/wam.lisp --- a/test/wam.lisp Tue Jul 12 16:31:46 2016 +0000 +++ b/test/wam.lisp Tue Jul 12 18:53:39 2016 +0000 @@ -464,15 +464,27 @@ (query-all (big-ass-list ?bal) (append ?bal (list x) ?bar))))))) -; (test hanoi -; (with-fresh-database -; (push-logic-frame-with -; (fact (append nil ?l ?l)) -; (rule (append (list* ?i ?tail) ?other (list* ?i ?l)) -; (append ?tail ?other ?l)) +(test hanoi + ;; From The Art of Prolog + (with-fresh-database + (push-logic-frame-with + (fact (append nil ?l ?l)) + (rule (append (list* ?i ?tail) ?other (list* ?i ?l)) + (append ?tail ?other ?l)) -; (fact (hanoi zero ?a ?b ?c (list (move ?a ?b)))) -; (rule (hanoi (s ?n) ?a ?b ?c ?moves) -; (hanoi ?n ?a ?c ?b ?moves1) -; (hanoi ?n ?c ?b ?a ?moves2) -; (append ?moves1 (list* (move ?a ?b) ?moves2) ?moves))))) + (fact (hanoi zero ?a ?b ?c nil)) + (rule (hanoi (s ?n) ?a ?b ?c ?moves) + (hanoi ?n ?a ?c ?b ?moves1) + (hanoi ?n ?c ?b ?a ?moves2) + (append ?moves1 (list* (move ?a ?b) ?moves2) ?moves))) + (should-return + ((hanoi zero a b c ?what) + (?what nil)) + ((hanoi (s zero) a b c ?what) + (?what ((move a b)))) + ((hanoi (s (s zero)) a b c ?what) + (?what ((move a c) (move a b) (move c b)))) + ((hanoi (s (s (s zero))) a b c ?what) + (?what ((move a b) (move a c) (move b c) + (move a b) + (move c a) (move c b) (move a b)))))))