/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
      • lists.pl
      • broadcast.pl -- Event service
      • shlib.pl
      • option.pl
      • thread_pool.pl -- Resource bounded thread management
      • gensym.pl
      • settings.pl -- Setting management
      • arithmetic.pl
      • main.pl -- Provide entry point for scripts
      • readutil.pl
      • operators.pl -- Manage operators
      • pairs.pl
      • prolog_source.pl -- Examine Prolog source-files
      • record.pl -- Access compound arguments by name
      • quasi_quotations.pl
      • 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
      • random.pl
      • base64.pl
      • aggregate.pl
      • yall.pl
      • 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
      • predicate_options.pl -- Access and analyse predicate options
      • csv.pl -- Process CSV (Comma-Separated Values) data
      • pprint.pl -- Pretty Print Prolog terms
      • atom.pl
      • 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
      • url.pl
      • www_browser.pl
      • prolog_pack.pl
      • git.pl
      • rbtrees.pl -- Red black trees
      • dif.pl -- The dif/2 constraint
      • charsio.pl
      • 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
      • dialect.pl
      • prolog_code.pl
      • sort.pl
      • iostream.pl -- Utilities to deal with streams
      • dicts.pl
      • varnumbers.pl
      • edit.pl -- Editor interface
      • base32.pl -- Base32 encoding and decoding
      • codesio.pl
      • coinduction.pl
      • date.pl -- Process dates and times
      • heaps.pl
      • statistics.pl -- Get information about resource usage
      • terms.pl
      • utf8.pl
      • when.pl -- Conditional coroutining
      • backcomp.pl
      • prolog_debug.pl -- User level debugging tools
      • listing.pl -- List programs and pretty print clauses
      • optparse.pl
      • prolog_trace.pl
      • prolog_wrap.pl -- Wrapping predicates
      • make.pl -- Reload modified source files
      • prolog_coverage.pl
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • writef.pl -- Old-style formatted write
      • help.pl
      • threadutil.pl -- Interactive thread utilities
      • persistency.pl -- Provide persistent dynamic predicates
      • nb_set.pl
      • prolog_config.pl
      • prolog_versions.pl
      • shell.pl -- Elementary shell commands
      • intercept.pl
      • macros.pl
      • check.pl
      • prolog_codewalk.pl -- Prolog code walker
      • prolog_metainference.pl
      • thread.pl -- High level thread primitives
      • system.pl -- System utilities
      • prolog_profile.pl
      • qsave.pl
      • zip.pl
      • prolog_autoload.pl -- Autoload all dependencies
      • hashtable.pl -- Hash tables
      • fastrw.pl -- Fast reading and writing of terms
      • quintus.pl
      • ctypes.pl -- Character code classification
      • increval.pl -- Incremental dynamic predicate modification
      • tables.pl
      • strings.pl
      • prolog_jiti.pl
      • explain.pl
      • exceptions.pl
      • streams.pl
      • prolog_history.pl
 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).