diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-07 16:44:25 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-07 16:44:25 +0000 |
commit | e6a38aa97b9de05ae0eede568212667b68784a60 (patch) | |
tree | 26cc01919d3502c9a66d734a616c9de8850b83b4 /builtins.c | |
parent | 0f958749e189e4dacd7a1f70cfc33460e1228d3b (diff) |
Add copy_term/2
Diffstat (limited to 'builtins.c')
-rw-r--r-- | builtins.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -32,6 +32,7 @@ BuiltinProto(builtincompare); BuiltinProto(builtinfunctor); BuiltinProto(builtinarg); BuiltinProto(builtinuniv); +BuiltinProto(builtincopyterm); BuiltinProto(builtinis); BuiltinProto(builtincatch); BuiltinProto(builtinthrow); @@ -98,6 +99,8 @@ findbuiltin(Term *goal) return builtinarg; if(Match(L"=..", 2)) return builtinuniv; + if(Match(L"copy_term", 2)) + return builtincopyterm; if(Match(L"is", 2)) return builtinis; if(Match(L"catch", 3)) @@ -461,6 +464,17 @@ builtinuniv(Term *goal, Binding **bindings, Module *module) } } +int +builtincopyterm(Term *goal, Binding **bindings, Module *module) +{ + USED(module); + Term *term1 = goal->children; + Term *term2 = term1->next; + Term *t = copyterm(term1, &clausenr); + clausenr++; + return unify(term2, t, bindings); +} + #define ToFloat(t) (t->tag == IntegerTerm ? (double)t->ival : t->dval) Term * |