diff options
| author | Jedidiah Barber <contact@jedbarber.id.au> | 2026-02-06 17:19:26 +1300 |
|---|---|---|
| committer | Jedidiah Barber <contact@jedbarber.id.au> | 2026-02-06 17:19:26 +1300 |
| commit | 6bced91bd28f860d830dfda921ee5056ec93f48c (patch) | |
| tree | a91432226dbf11ed944cfe50507e0b7a03870bd2 /test/fivesix.adb | |
| parent | 9b964acdb0cc36d09193861b8f7d33aea248ee46 (diff) | |
Evaluation algorithm changed to inverted interleaved depth first search
Diffstat (limited to 'test/fivesix.adb')
| -rw-r--r-- | test/fivesix.adb | 28 |
1 files changed, 17 insertions, 11 deletions
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; |
