summaryrefslogtreecommitdiff
path: root/app/Builtins.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/Builtins.hs')
-rw-r--r--app/Builtins.hs22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/Builtins.hs b/app/Builtins.hs
index 7ef4c10..fc0a1cb 100644
--- a/app/Builtins.hs
+++ b/app/Builtins.hs
@@ -245,6 +245,25 @@ structUnify arity str = do
s {cur = cur {heap = h', gol = gcode ++ gol cur, hed = hcode ++ hed cur}}
continue
+{- terms -}
+var :: InterpFn
+var = do
+ heap <- gets (heap . cur)
+ scope <- gets (hvar . cur)
+ case derefHeap heap <$> scope M.!? 0 of
+ Nothing -> continue
+ Just (FreeRef _) -> continue
+ _ -> backtrack
+
+same_term :: InterpFn
+same_term = do
+ heap <- gets (heap . cur)
+ scope <- gets (hvar . cur)
+ case map (fmap (derefHeap heap) . (scope M.!?)) [0, 1] of
+ [Just a, Just b]
+ | a == b -> continue
+ _ -> backtrack
+
{- operator management -}
op :: InterpFn
op = do
@@ -351,7 +370,10 @@ addPrelude = do
addProc (assertCode addClauseZ) "assert" 1
addBi retractall "retractall" 1
addBi call "call" 1
+ {- terms -}
addBi struct "struct" 3
+ addBi var "var" 1
+ addBi same_term "same_term" 2
{- code loading -}
addBi (load False) "load" 1
addBi (load True) "source" 1