summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kompsos-prelude.adb104
-rw-r--r--src/kompsos-prelude.ads83
-rw-r--r--src/kompsos.adb14
-rw-r--r--src/kompsos.ads4
4 files changed, 205 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;
+
+
diff --git a/src/kompsos-prelude.ads b/src/kompsos-prelude.ads
new file mode 100644
index 0000000..5dbc562
--- /dev/null
+++ b/src/kompsos-prelude.ads
@@ -0,0 +1,83 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Licensed under the Sunset License v1.0
+
+-- See license.txt for further details
+
+
+generic
+package Kompsos.Prelude is
+
+
+ -- caro --
+
+ function Head
+ (This : in World;
+ Full_List, Head_Term : in Term'Class)
+ return World;
+
+ procedure Head
+ (This : in out World;
+ Full_List, Head_Term : in Term'Class);
+
+
+ -- cdro --
+
+ function Tail
+ (This : in World;
+ Full_List, Tail_Term : in Term'Class)
+ return World;
+
+ procedure Tail
+ (This : in out World;
+ Full_List, Tail_Term : in Term'Class);
+
+
+ -- conso --
+
+ function Cons
+ (This : in World;
+ Head_Term, Tail_Term, Full_List : in Term'Class)
+ return World;
+
+ procedure Cons
+ (This : in out World;
+ Head_Term, Tail_Term, Full_List : in Term'Class);
+
+
+ -- nullo --
+
+ function Nil
+ (This : in World;
+ Nil_Term : in Term'Class)
+ return World;
+
+ procedure Nil
+ (This : in out World;
+ Nil_Term : in Term'Class);
+
+
+ -- eqo --
+ -- Skipped due to being a synonym for Unify
+
+
+ -- eq-caro --
+ -- Skipped due to being a synonym for Head
+
+
+ -- pairo --
+
+ function Pair
+ (This : in World;
+ Pair_Term : in Term'Class)
+ return World;
+
+ procedure Pair
+ (This : in out World;
+ Pair_Term : in Term'Class);
+
+
+end Kompsos.Prelude;
+
+
diff --git a/src/kompsos.adb b/src/kompsos.adb
index a621b7f..7cfd581 100644
--- a/src/kompsos.adb
+++ b/src/kompsos.adb
@@ -156,6 +156,20 @@ package body Kompsos is
function T
+ (Item1, Item2 : in Term)
+ return Term is
+ begin
+ return My_Term : Term do
+ My_Term.Actual := new Term_Component'(
+ Kind => Pair_Term,
+ Count => 1,
+ Left => Item1,
+ Right => Item2);
+ end return;
+ end T;
+
+
+ function T
(Items : in Term_Array)
return Term is
begin
diff --git a/src/kompsos.ads b/src/kompsos.ads
index bca09b8..a2e210e 100644
--- a/src/kompsos.ads
+++ b/src/kompsos.ads
@@ -48,6 +48,10 @@ package Kompsos is
return Term;
function T
+ (Item1, Item2 : in Term)
+ return Term;
+
+ function T
(Items : in Term_Array)
return Term;