From f53fea8d4d8428e81a048cab5ac323d3a3979b00 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 2 Nov 2015 19:34:04 -0800 Subject: Add amb test case for continuations. * tests/012/cont.tl (amb-scope): New macro. (amb): New function. New test case using amb. --- tests/012/cont.tl | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/012/cont.tl b/tests/012/cont.tl index 6bdfa14c..0a728ff9 100644 --- a/tests/012/cont.tl +++ b/tests/012/cont.tl @@ -17,3 +17,23 @@ (test (let ((f (obtain (yflatten '(a b (c . d) (e (f (g)))))))) (gun [f])) (a b c d e f g)) + +(defmacro amb-scope (. forms) + ^(block amb-scope ,*forms)) + +(defun amb (. args) + (suspend amb-scope cont + (each ((a args)) + (when (and a (call cont a)) + (return-from amb a))))) + +(test (amb-scope + (let ((w1 (amb "the" "that" "a")) + (w2 (amb "frog" "elephant" "thing")) + (w3 (amb "walked" "treaded" "grows")) + (w4 (amb "slowly" "quickly"))) + (amb (and (eql [w1 -1] [w2 0]) + (eql [w2 -1] [w3 0]) + (eql [w3 -1] [w4 0]))) + (list w1 w2 w3 w4))) + ("that" "thing" "grows" "slowly")) -- cgit v1.2.3