A.53 library(terms): Term manipulation
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • The SWI-Prolog library
        • library(terms): Term manipulation
          • term_size/2
          • variant/2
          • subsumes_chk/2
          • subsumes/2
          • term_subsumer/3
          • term_factorized/3
          • mapargs/3
          • mapsubterms/3
          • mapsubterms_var/3
          • foldsubterms/4
          • foldsubterms/5
          • same_functor/2
          • same_functor/3
          • same_functor/4
    • Packages
Availability::- use_module(library(terms)).(can be autoloaded)
Source[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

    • mapsubterms/3 unifies T2 with T1.
    • mapsubterms_var/3 treats variables as other terms.

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