/usr/local/lib/swipl/library/pure_input.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 -- Event service
      • shlib.pl
      • option.pl -- Option list processing
      • thread_pool.pl -- Resource bounded thread management
      • gensym.pl -- Generate unique symbols
      • settings.pl -- Setting management
      • arithmetic.pl
      • main.pl
      • 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 -- Pure Input from files and streams
        • phrase_from_file/2
        • phrase_from_file/3
        • phrase_from_stream/2
        • syntax_error//1
        • lazy_list_location//1
        • lazy_list_character_count//1
        • stream_to_lazy_list/2
      • solution_sequences.pl -- Modify solution sequences
      • ordsets.pl -- Ordered set manipulation
      • random.pl -- Random numbers
      • base64.pl -- Base64 encoding and decoding
      • aggregate.pl
      • 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
      • predicate_options.pl -- Access and analyse predicate options
      • csv.pl
      • 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 -- Lazy list handling
      • ugraphs.pl -- Graph manipulation library
      • url.pl -- Analysing and constructing URL
      • www_browser.pl
      • 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 -- Some traditional Edinburgh predicates
      • 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
      • intercept.pl
      • increval.pl -- Incremental dynamic predicate modification
      • tables.pl -- XSB interface to tables
      • backcomp.pl -- Backward compatibility
      • prolog_history.pl
      • base32.pl
      • terms.pl -- Term manipulation
      • quintus.pl -- Quintus compatibility
      • 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
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • when.pl
      • persistency.pl -- Provide persistent dynamic predicates
      • prolog_jiti.pl -- Just In Time Indexing (JITI) utilities
      • zip.pl -- Access resource ZIP archives
      • ansi_term.pl
      • check.pl
      • prolog_codewalk.pl -- Prolog code walker
      • oset.pl -- Ordered set manipulation
      • listing.pl -- List programs and pretty print clauses
      • help.pl -- Text based manual
      • prolog_debug.pl -- User level debugging tools
      • optparse.pl -- command line parsing
      • fastrw.pl -- Fast reading and writing of terms
      • shell.pl
      • prolog_config.pl
      • portray_text.pl
      • threadutil.pl -- Interactive thread utilities
      • thread.pl -- High level thread primitives
      • prolog_profile.pl -- Execution profiler
      • nb_set.pl -- Non-backtrackable sets
      • exceptions.pl
      • prolog_metainference.pl -- Infer meta-predicate properties
      • prolog_versions.pl -- Demand specific (Prolog) versions
      • files.pl
      • edit.pl -- Editor interface
      • prolog_coverage.pl -- Coverage analysis tool
      • ctypes.pl -- Character code classification
      • make.pl -- Reload modified source files
      • qsave.pl
      • prolog_autoload.pl -- Autoload all dependencies
      • hashtable.pl
      • streams.pl -- Manage Prolog streams
      • strings.pl
      • writef.pl -- Old-style formatted write
      • macros.pl
      • prolog_trace.pl -- Print access to predicates
      • prolog_wrap.pl -- Wrapping predicates
      • explain.pl -- Describe Prolog Terms
      • system.pl -- System utilities
 phrase_from_file(:Grammar, +File) is nondet
Process the content of File using the DCG rule Grammar. The space usage of this mechanism depends on the length of the not committed part of Grammar. Committed parts of the temporary list are reclaimed by the garbage collector, while the list is extended on demand due to unification of the attributed tail variable. Below is an example that counts the number of times a string appears in a file. The library dcg/basics provides string//1 matching an arbitrary string and remainder//1 which matches the remainder of the input without parsing.
:- use_module(library(dcg/basics)).

file_contains(File, Pattern) :-
        phrase_from_file(match(Pattern), File).

match(Pattern) -->
        string(_),
        string(Pattern),
        remainder(_).

match_count(File, Pattern, Count) :-
        aggregate_all(count, file_contains(File, Pattern), Count).

This can be called as (note that the pattern must be a string (code list)):

?- match_count('pure_input.pl', `file`, Count).