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