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

  • swipl
    • library
      • error.pl
      • debug.pl
      • apply.pl
      • lists.pl
      • broadcast.pl
      • predicate_options.pl -- Access and analyse predicate options
      • shlib.pl
      • option.pl
      • thread_pool.pl
      • gensym.pl -- Generate unique symbols
      • settings.pl
      • arithmetic.pl -- Extensible arithmetic
      • main.pl -- Provide entry point for scripts
      • readutil.pl
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl -- Examine Prolog source-files
      • record.pl -- Access compound arguments by name
      • 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 -- Base64 encoding and decoding
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • yall.pl -- Lambda expressions
      • sandbox.pl -- Sandboxed Prolog code
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • assoc.pl -- Binary associations
      • prolog_format.pl -- Analyse format specifications
      • 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
      • lazy_lists.pl -- Lazy list handling
      • ugraphs.pl -- Graph manipulation library
      • iostream.pl -- Utilities to deal with streams
      • url.pl -- Analysing and constructing URL
      • www_browser.pl -- Open a URL in the users browser
      • prolog_pack.pl -- A package manager for Prolog
      • git.pl -- Run GIT commands
      • rbtrees.pl -- Red black trees
      • dif.pl -- The dif/2 constraint
      • charsio.pl -- I/O on Lists of Character Codes
      • prolog_stack.pl -- Examine the Prolog stack
      • edinburgh.pl -- Some traditional Edinburgh predicates
      • prolog_clause.pl -- Get detailed source-information about a clause
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • wfs.pl -- Well Founded Semantics interface
      • dialect.pl -- Support multiple Prolog dialects
      • prolog_code.pl -- Utilities for reasoning about code
      • sort.pl
      • dicts.pl -- Dict utilities
      • varnumbers.pl -- Utilities for numbered terms
      • backcomp.pl -- Backward compatibility
      • listing.pl -- List programs and pretty print clauses
      • base32.pl -- Base32 encoding and decoding
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • date.pl -- Process dates and times
      • heaps.pl -- heaps/priority queues
      • statistics.pl -- Get information about resource usage
      • terms.pl -- Term manipulation
      • when.pl -- Conditional coroutining
      • quintus.pl -- Quintus compatibility
      • shell.pl -- Elementary shell commands
      • threadutil.pl -- Interactive thread utilities
      • explain.pl -- Describe Prolog Terms
      • prolog_coverage.pl -- Coverage analysis tool
      • strings.pl -- String utilities
      • prolog_jiti.pl -- Just In Time Indexing (JITI) utilities
      • streams.pl -- Manage Prolog streams
      • optparse.pl -- command line parsing
      • fastrw.pl -- Fast reading and writing of terms
      • thread.pl -- High level thread primitives
      • system.pl -- System utilities
      • zip.pl -- Access resource ZIP archives
      • prolog_wrap.pl -- Wrapping predicates
      • prolog_metainference.pl -- Infer meta-predicate properties
      • prolog_codewalk.pl -- Prolog code walker
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • prolog_debug.pl -- User level debugging tools
      • intercept.pl -- Intercept and signal interface
        • intercept/3
        • intercept/4
        • intercept_all/4
        • nb_intercept_all/4
        • send_signal/1
        • send_silent_signal/1
      • nb_set.pl -- Non-backtrackable sets
      • hashtable.pl -- Hash tables
      • writef.pl -- Old-style formatted write
      • rwlocks.pl -- Read/write locks
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
 intercept(:Goal, ?Ball, :Handler)
Run Goal as call/1. If somewhere during the execution of Goal send_signal/1 is called with a Signal that unifies with Ball, run Handler and continue the execution.

This predicate is related to catch/3, but rather than aborting the execution of Goal and running Handler it continues the execution of Goal. This construct is also related to delimited continuations (see reset/3 and shift/1). It only covers one (common) use case for delimited continuations, but does so with a simpler interface, at lower overhead and without suffering from poor interaction with the cut.

Note that Ball and Handler are copied before calling the (copy) of Handler to avoid instantiation of Ball and/or Handler which can make a subsequent signal fail.

See also
- intercept/4, reset/3, catch/4, broadcast_request/1.
Compatibility
- Ciao