diff options
Diffstat (limited to 'src/kompsos-prelude.adb')
| -rw-r--r-- | src/kompsos-prelude.adb | 104 |
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; + + |
