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

  • swipl
    • library
      • error.pl
      • debug.pl
      • apply.pl -- Apply predicates on a list
      • lists.pl -- List Manipulation
      • broadcast.pl -- Event service
      • shlib.pl
      • option.pl -- Option list processing
      • thread_pool.pl -- Resource bounded thread management
      • gensym.pl -- Generate unique symbols
      • settings.pl
      • arithmetic.pl -- Extensible arithmetic
      • main.pl -- Provide entry point for scripts
      • readutil.pl -- Read utilities
      • operators.pl -- Manage operators
      • pairs.pl -- Operations on key-value lists
      • prolog_source.pl
      • record.pl -- Access compound arguments by name
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • pure_input.pl
      • 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
      • 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
      • occurs.pl -- Finding and counting sub-terms
      • prolog_xref.pl
      • prolog_colour.pl -- Prolog syntax colouring support.
      • lazy_lists.pl -- Lazy list handling
      • ugraphs.pl -- Graph manipulation library
      • 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
      • dif.pl -- The dif/2 constraint
      • charsio.pl -- I/O on Lists of Character Codes
      • 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
      • dialect.pl -- Support multiple Prolog dialects
      • prolog_code.pl -- Utilities for reasoning about code
      • sort.pl
      • iostream.pl -- Utilities to deal with streams
      • dicts.pl -- Dict utilities
      • varnumbers.pl -- Utilities for numbered terms
      • exceptions.pl -- Exception classification
      • backcomp.pl -- Backward compatibility
      • base32.pl -- Base32 encoding and decoding
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl
      • date.pl -- Process dates and times
      • heaps.pl -- heaps/priority queues
      • statistics.pl -- Get information about resource usage
      • terms.pl -- Term manipulation
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • when.pl
      • ctypes.pl
      • thread.pl -- High level thread primitives
      • nb_set.pl
      • prolog_history.pl
      • prolog_config.pl
      • quintus.pl
      • shell.pl -- Elementary shell commands
      • prolog_debug.pl -- User level debugging tools
      • prolog_profile.pl -- Execution profiler
      • zip.pl -- Access resource ZIP archives
      • ansi_term.pl
      • listing.pl -- List programs and pretty print clauses
      • prolog_trace.pl
      • prolog_wrap.pl -- Wrapping predicates
      • strings.pl -- String utilities
      • prolog_versions.pl -- Demand specific (Prolog) versions
      • prolog_metainference.pl
      • prolog_codewalk.pl -- Prolog code walker
      • help.pl
      • make.pl -- Reload modified source files
      • intercept.pl -- Intercept and signal interface
        • intercept/3
        • intercept/4
        • intercept_all/4
        • nb_intercept_all/4
        • send_signal/1
        • send_silent_signal/1
      • threadutil.pl -- Interactive thread utilities
      • optparse.pl -- command line parsing
      • explain.pl -- Describe Prolog Terms
      • fastrw.pl
      • hashtable.pl -- Hash tables
      • prolog_coverage.pl -- Coverage analysis tool
      • macros.pl
      • portray_text.pl
      • prolog_jiti.pl
      • prolog_autoload.pl
      • check.pl -- Consistency checking
      • streams.pl
      • writef.pl -- Old-style formatted write
      • system.pl -- System utilities
      • rwlocks.pl
      • edit.pl
      • tables.pl
 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