From 99c85459a7fb1c5e51472a73b0d6780f54c9893e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Adri=C3=A1n=20Arroyo=20Calle?= Date: Fri, 19 Jan 2024 17:33:45 +0100 Subject: [PATCH] Move copy_term/3 to library(iso_ext) --- src/lib/iso_ext.pl | 17 ++++++++++++++++- src/machine/project_attributes.pl | 10 +--------- src/toplevel.pl | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/lib/iso_ext.pl b/src/lib/iso_ext.pl index 15c05fd2..3e17f218 100644 --- a/src/lib/iso_ext.pl +++ b/src/lib/iso_ext.pl @@ -17,7 +17,8 @@ but they're not part of the ISO Prolog standard at the moment. succ/2, call_nth/2, countall/2, - copy_term_nat/2]). + copy_term_nat/2, + copy_term/3]). :- use_module(library(error), [can_be/2, domain_error/3, @@ -26,6 +27,8 @@ but they're not part of the ISO Prolog standard at the moment. :- use_module(library(lists), [maplist/3]). +:- use_module(library('$project_atts')). + :- meta_predicate(forall(0, 0)). %% forall(Generate, Test). @@ -382,3 +385,15 @@ countall(Goal, N) :- copy_term_nat(Source, Dest) :- '$copy_term_without_attr_vars'(Source, Dest). +%% copy_term(+Term, -Copy, -Gs). +% +% Produce a deep copy of Term and unify it to Copy, without attributes. +% Unify Gs with a list of goals that represent the attributes of Term. +% Similar to `copy_term/2` but splitting the attributes. +copy_term(Term, Copy, Gs) :- + can_be(list, Gs), + findall(Term-Rs, '$project_atts':term_residual_goals(Term,Rs), [Copy-Gs]), + ( var(Gs) -> + Gs = [] + ; true + ). diff --git a/src/machine/project_attributes.pl b/src/machine/project_attributes.pl index f54797c8..1ad0c47f 100644 --- a/src/machine/project_attributes.pl +++ b/src/machine/project_attributes.pl @@ -1,4 +1,4 @@ -:- module('$project_atts', [copy_term/3]). +:- module('$project_atts', []). :- use_module(library(dcgs)). :- use_module(library(error), [can_be/2]). @@ -100,14 +100,6 @@ gather_residual_goals([V|Vs]) --> delete_all_attributes_from_var(V) :- '$delete_all_attributes_from_var'(V). -copy_term(Term, Copy, Gs) :- - can_be(list, Gs), - findall(Term-Rs, term_residual_goals(Term,Rs), [Copy-Gs]), - ( var(Gs) -> - Gs = [] - ; true - ). - term_residual_goals(Term,Rs) :- '$term_attributed_variables'(Term, Vs), phrase(gather_residual_goals(Vs), Rs), diff --git a/src/toplevel.pl b/src/toplevel.pl index 64340a9a..25ad94aa 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -1,4 +1,4 @@ -:- module('$toplevel', [copy_term/3]). +:- module('$toplevel', []). :- use_module(library(atts), [call_residue_vars/2]). :- use_module(library(charsio)). -- 2.54.0