[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.