 [det]mapsubterms(:Goal, 
+Term1, -Term2)
[det]mapsubterms_var(:Goal, 
+Term1, -Term2)Recursively map sub terms of Term1 into subterms of Term2 
for every pair for which
[det]mapsubterms(:Goal, 
+Term1, -Term2)
[det]mapsubterms_var(:Goal, 
+Term1, -Term2)Recursively map sub terms of Term1 into subterms of Term2 
for every pair for which call(Goal, ST1, ST2) succeeds. 
Procedurably, the mapping for each (sub) term pair T1/T2 is 
defined as:
- If T1 is a variable
 
 
- If call(Goal, T1, T2)succeeds we are done. Note that 
the mapping does not continue in T2. If this is desired, Goal 
must call mapsubterms/3 
explicitly as part of its conversion.
- If T1 is a dict, map all values, i.e., the tag and keys 
are left untouched.
- If T1 is a list, map all elements, i.e., the list 
structure is left untouched.
- If T1 is a compound, use same_functor/3 
to instantiate T2 and recurse over the term arguments left to 
right.
- Otherwise T2 is unified with T1.
Both predicates are implemented using foldsubterms/5.