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

  • swipl
    • library
      • error.pl
      • debug.pl -- Print debug messages and test assertions
      • apply.pl -- Apply predicates on a list
      • lists.pl -- List Manipulation
      • broadcast.pl
      • shlib.pl -- Utility library for loading foreign objects (DLLs, shared objects)
      • option.pl -- Option list processing
      • thread_pool.pl
      • gensym.pl -- Generate unique symbols
      • settings.pl -- Setting management
      • arithmetic.pl
      • main.pl -- Provide entry point for scripts
      • readutil.pl
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl
      • record.pl
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • pure_input.pl -- Pure Input from files and streams
      • solution_sequences.pl -- Modify solution sequences
      • ordsets.pl -- Ordered set manipulation
      • random.pl -- Random numbers
      • base64.pl
      • aggregate.pl -- Aggregation operators on backtrackable predicates
        • safe_meta/2
        • aggregate/3
        • aggregate/4
        • aggregate_all/3
        • aggregate_all/4
        • foldall/4
        • foreach/2
        • free_variables/4
      • yall.pl -- Lambda expressions
      • sandbox.pl
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • assoc.pl -- Binary associations
      • prolog_format.pl -- Analyse format specifications
      • predicate_options.pl -- Access and analyse predicate options
      • csv.pl -- Process CSV (Comma-Separated Values) data
      • pprint.pl -- Pretty Print Prolog terms
      • atom.pl -- Operations on atoms
      • modules.pl -- Module utility predicates
      • occurs.pl -- Finding and counting sub-terms
      • prolog_xref.pl -- Prolog cross-referencer data collection
      • prolog_colour.pl -- Prolog syntax colouring support.
      • lazy_lists.pl
      • ugraphs.pl -- Graph manipulation library
      • url.pl
      • www_browser.pl -- Open a URL in the users browser
      • prolog_pack.pl
      • git.pl -- Run GIT commands
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • dialect.pl -- Support multiple Prolog dialects
      • system.pl -- System utilities
      • terms.pl -- Term manipulation
      • date.pl -- Process dates and times
      • persistency.pl -- Provide persistent dynamic predicates
      • iostream.pl -- Utilities to deal with streams
      • prolog_stack.pl -- Examine the Prolog stack
      • edinburgh.pl
      • prolog_clause.pl
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • wfs.pl -- Well Founded Semantics interface
      • prolog_code.pl -- Utilities for reasoning about code
      • sort.pl
      • dicts.pl -- Dict utilities
      • dif.pl -- The dif/2 constraint
      • varnumbers.pl -- Utilities for numbered terms
      • pio.pl -- Pure I/O
      • statistics.pl -- Get information about resource usage
      • listing.pl
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • tables.pl -- XSB interface to tables
      • backcomp.pl -- Backward compatibility
      • threadutil.pl -- Interactive thread utilities
      • base32.pl
      • charsio.pl -- I/O on Lists of Character Codes
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl
      • heaps.pl -- heaps/priority queues
      • rbtrees.pl -- Red black trees
      • when.pl -- Conditional coroutining
      • help.pl
      • optparse.pl -- command line parsing
      • prolog_profile.pl -- Execution profiler
      • thread.pl
      • oset.pl -- Ordered set manipulation
      • strings.pl
      • hashtable.pl
      • prolog_debug.pl -- User level debugging tools
      • check.pl
      • prolog_codewalk.pl -- Prolog code walker
      • tty.pl
      • nb_set.pl -- Non-backtrackable sets
      • quintus.pl -- Quintus compatibility
      • make.pl -- Reload modified source files
      • prolog_versions.pl -- Demand specific (Prolog) versions
      • ctypes.pl -- Character code classification
      • readln.pl
      • prolog_coverage.pl -- Coverage analysis tool
      • prolog_metainference.pl -- Infer meta-predicate properties
      • intercept.pl
      • shell.pl -- Elementary shell commands
      • prolog_trace.pl -- Print access to predicates
      • exceptions.pl
      • files.pl
      • prolog_history.pl
      • writef.pl -- Old-style formatted write
      • macros.pl
      • portray_text.pl -- Portray text
      • streams.pl -- Manage Prolog streams
      • prolog_jiti.pl
      • prolog_autoload.pl
      • edit.pl
      • prolog_config.pl
      • qsave.pl
      • zip.pl -- Access resource ZIP archives
      • prolog_wrap.pl -- Wrapping predicates
      • increval.pl -- Incremental dynamic predicate modification
      • fastrw.pl
      • rwlocks.pl -- Read/write locks
 free_variables(:Generator, +Template, +VarList0, -VarList) is det
Find free variables in bagof/setof template. In order to handle variables properly, we have to find all the universally quantified variables in the Generator. All variables as yet unbound are universally quantified, unless
  1. they occur in the template
  2. they are bound by X^P, setof/3, or bagof/3

free_variables(Generator, Template, OldList, NewList) finds this set using OldList as an accumulator.

author
- Richard O'Keefe
- Jan Wielemaker (made some SWI-Prolog enhancements)
license
- Public domain (from DEC10 library).
To be done
- Distinguish between control-structures and data terms.
- Exploit our built-in term_variables/2 at some places?