From 32eea08483afb754c7da5663f33cd022d4a2723c Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Sun, 8 Feb 2026 22:00:52 +1300 Subject: Iterative deepening depth first search as a complete (?) search method --- test/complete.adb | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 test/complete.adb (limited to 'test') diff --git a/test/complete.adb b/test/complete.adb new file mode 100644 index 0000000..0890e8b --- /dev/null +++ b/test/complete.adb @@ -0,0 +1,72 @@ + + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + +with + + Ada.Text_IO, + Kompsos.Pretty_Print; + + +procedure Complete is + + package TIO renames Ada.Text_IO; + + + package InKomp is new Kompsos (Integer); + use InKomp; + + package Printer is new InKomp.Pretty_Print (Integer'Image); + + + function Fives + (This : in Goal; + Item : in Term'Class) + return Goal + is + One, Two : Goal := This; + begin + One.Unify (Item, 5); + Two.Conjunct (Fives'Access, Item); + return Disjunct (One, Two); + end Fives; + +begin + + TIO.Put_Line ("This program will loop forever unless the implementation is using"); + TIO.Put_Line ("a complete search strategy. It is suggested to terminate it manually"); + TIO.Put_Line ("if it doesn't complete quickly."); + + TIO.New_Line; + + declare + Relation : Goal := Empty_Goal; + Value : constant Term := Relation.Fresh; + Ignore : constant Term := Relation.Fresh; + begin + Relation := Disjunct (Relation.Unify (Ignore, 6), Relation.Unify (Value, 7)); + Relation := Fives (Relation, Ignore); + TIO.Put_Line ("Value is " & Printer.Image (Value.Resolve (Relation.Run)) & " on right."); + end; + + declare + Relation : Goal := Empty_Goal; + Value : constant Term := Relation.Fresh; + Ignore : constant Term := Relation.Fresh; + begin + Relation := Disjunct (Relation.Unify (Value, 7), Relation.Unify (Ignore, 6)); + Relation := Fives (Relation, Ignore); + TIO.Put_Line ("Value is " & Printer.Image (Value.Resolve (Relation.Run)) & " on left."); + end; + + TIO.New_Line; + + TIO.Put_Line ("Test complete."); + +end Complete; + + -- cgit