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.