From 6bced91bd28f860d830dfda921ee5056ec93f48c Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Fri, 6 Feb 2026 17:19:26 +1300 Subject: Evaluation algorithm changed to inverted interleaved depth first search --- test/fivesix.adb | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'test/fivesix.adb') diff --git a/test/fivesix.adb b/test/fivesix.adb index 9620c60..781b7c3 100644 --- a/test/fivesix.adb +++ b/test/fivesix.adb @@ -24,7 +24,6 @@ procedure FiveSix is use InPrin; - -- It is possible to create a recursion using functions like this... function Fives (This : in Goal) return Goal @@ -36,9 +35,19 @@ procedure FiveSix is return Disjunct (One, Two); end Fives; + function Sixes + (This : in Goal) + return Goal + is + One, Two : Goal := This; + begin + One.Unify (One.Fresh, 6); + Two.Conjunct (Sixes'Access); + return Disjunct (One, Two); + end Sixes; + - Sixes : Goal := Empty_Goal; - Result : Goal; + Relation : constant Goal := Disjunct (Fives (Empty_Goal), Sixes (Empty_Goal)); begin @@ -47,14 +56,11 @@ begin TIO.New_Line; - -- ...but it is a lot simpler and easier to create recursions this way instead. - Sixes.Unify (Sixes.Fresh, 6); - Sixes.Recurse; - - Result := Disjunct (Fives (Empty_Goal), Sixes); - - -- Note how the States from Fives keep creating new Variables instead of looping. - TIO.Put_Line (Image (Result.Run (5))); + -- Note how the States keep using new Variables instead of just reusing the same one. + -- This is an unavoidable side effect of setting up Variable Terms to be manually + -- created from a Goal by the programmer, instead of being supplied as needed in the + -- process of evaluation. + TIO.Put_Line (Image (Relation.Run (5))); end FiveSix; -- cgit