/usr/local/lib/swipl/library/terms.pl
All Application Manual Name SummaryHelp

  • swipl
    • library
      • error.pl
      • debug.pl
      • apply.pl -- Apply predicates on a list
      • lists.pl
      • broadcast.pl
      • shlib.pl
      • option.pl
      • thread_pool.pl -- Resource bounded thread management
      • gensym.pl
      • settings.pl
      • arithmetic.pl -- Extensible arithmetic
      • main.pl
      • readutil.pl
      • operators.pl
      • pairs.pl
      • prolog_source.pl
      • record.pl
      • quasi_quotations.pl
      • pure_input.pl -- Pure Input from files and streams
      • solution_sequences.pl -- Modify solution sequences
      • ordsets.pl
      • random.pl
      • base64.pl
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • yall.pl
      • sandbox.pl
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • assoc.pl
      • prolog_format.pl
      • predicate_options.pl
      • csv.pl
      • pprint.pl
      • atom.pl
      • modules.pl -- Module utility predicates
      • occurs.pl
      • prolog_xref.pl
      • prolog_colour.pl
      • lazy_lists.pl -- Lazy list handling
      • ugraphs.pl -- Graph manipulation library
      • url.pl
      • www_browser.pl -- Open a URL in the users browser
      • prolog_pack.pl
      • git.pl
      • rbtrees.pl
      • dif.pl
      • charsio.pl
      • prolog_stack.pl
      • edinburgh.pl -- Some traditional Edinburgh predicates
      • prolog_clause.pl
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • wfs.pl
      • dialect.pl -- Support multiple Prolog dialects
      • prolog_code.pl
      • sort.pl
      • iostream.pl -- Utilities to deal with streams
      • dicts.pl
      • varnumbers.pl -- Utilities for numbered terms
      • make.pl
      • zip.pl
      • thread.pl
      • listing.pl
      • threadutil.pl -- Interactive thread utilities
      • optparse.pl
      • backcomp.pl
      • oset.pl
      • prolog_jiti.pl
      • intercept.pl
      • prolog_metainference.pl -- Infer meta-predicate properties
      • utf8.pl
      • streams.pl -- Manage Prolog streams
      • statistics.pl -- Get information about resource usage
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • base32.pl -- Base32 encoding and decoding
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • date.pl
      • heaps.pl
      • terms.pl -- 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
      • when.pl -- Conditional coroutining
      • prolog_coverage.pl -- Coverage analysis tool
      • strings.pl
      • prolog_trace.pl
      • exceptions.pl
      • persistency.pl
      • quintus.pl
      • fastrw.pl
      • portray_text.pl
      • prolog_autoload.pl
      • check.pl
      • prolog_codewalk.pl -- Prolog code walker
      • qsave.pl
      • shell.pl -- Elementary shell commands
      • tables.pl
      • macros.pl
      • prolog_debug.pl -- User level debugging tools
      • increval.pl -- Incremental dynamic predicate modification
      • rwlocks.pl
      • hashtable.pl
      • edit.pl
      • writef.pl
      • help.pl
      • ctypes.pl
      • prolog_wrap.pl
      • prolog_profile.pl
      • prolog_versions.pl
      • files.pl
      • system.pl
      • prolog_config.pl
      • prolog_history.pl
      • nb_set.pl
 mapsubterms(:Goal, +Term1, -Term2) is det
 mapsubterms_var(:Goal, +Term1, -Term2) is det
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.