summaryrefslogtreecommitdiff
path: root/src/kompsos-prelude.adb
diff options
context:
space:
mode:
authorJedidiah Barber <contact@jedbarber.id.au>2025-11-11 06:55:37 +1300
committerJedidiah Barber <contact@jedbarber.id.au>2025-11-11 06:55:37 +1300
commitaf9ee420c398bac0eff6d9dfb1919851261b8318 (patch)
treed40284e00abf26a63f601f22cb9a996b6474b1f9 /src/kompsos-prelude.adb
parent7719622ff4f72769f15a771dc5455dabeff295bc (diff)
Non-recursive, non-numeric portions of prelude
Diffstat (limited to 'src/kompsos-prelude.adb')
-rw-r--r--src/kompsos-prelude.adb104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/kompsos-prelude.adb b/src/kompsos-prelude.adb
new file mode 100644
index 0000000..6cb8b2b
--- /dev/null
+++ b/src/kompsos-prelude.adb
@@ -0,0 +1,104 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Licensed under the Sunset License v1.0
+
+-- See license.txt for further details
+
+
+package body Kompsos.Prelude is
+
+
+ function Head
+ (This : in World;
+ Full_List, Head_Term : in Term'Class)
+ return World is
+ begin
+ return Result : World := This do
+ Result.Unify (T (Head_Term & T (Result.Fresh)), Full_List);
+ end return;
+ end Head;
+
+ procedure Head
+ (This : in out World;
+ Full_List, Head_Term : in Term'Class) is
+ begin
+ This := Head (This, Full_List, Head_Term);
+ end Head;
+
+
+ function Tail
+ (This : in World;
+ Full_List, Tail_Term : in Term'Class)
+ return World is
+ begin
+ return Result : World := This do
+ Result.Unify (T (T (Result.Fresh) & Tail_Term), Full_List);
+ end return;
+ end Tail;
+
+ procedure Tail
+ (This : in out World;
+ Full_List, Tail_Term : in Term'Class) is
+ begin
+ This := Tail (This, Full_List, Tail_Term);
+ end Tail;
+
+
+ function Cons
+ (This : in World;
+ Head_Term, Tail_Term, Full_List : in Term'Class)
+ return World is
+ begin
+ return Result : World := This do
+ Result.Unify (T (Head_Term & Tail_Term), Full_List);
+ end return;
+ end Cons;
+
+ procedure Cons
+ (This : in out World;
+ Head_Term, Tail_Term, Full_List : in Term'Class) is
+ begin
+ This := Cons (This, Head_Term, Tail_Term, Full_List);
+ end Cons;
+
+
+ function Nil
+ (This : in World;
+ Nil_Term : in Term'Class)
+ return World is
+ begin
+ return Result : World := This do
+ Result.Unify (Null_Term, Nil_Term);
+ end return;
+ end Nil;
+
+ procedure Nil
+ (This : in out World;
+ Nil_Term : in Term'Class) is
+ begin
+ This := Nil (This, Nil_Term);
+ end Nil;
+
+
+ function Pair
+ (This : in World;
+ Pair_Term : in Term'Class)
+ return World is
+ begin
+ return Result : World := This do
+ Result.Unify (T (T (Result.Fresh), T (Result.Fresh)), Pair_Term);
+ end return;
+ end Pair;
+
+ procedure Pair
+ (This : in out World;
+ Pair_Term : in Term'Class) is
+ begin
+ This := Pair (This, Pair_Term);
+ end Pair;
+
+
+end Kompsos.Prelude;
+
+