Basic input/output

Author(s): Daniel Cabeza, Mats Carlsson.

This module provides predicates for character input/output and for canonical term output. From the ISO-Prolog predicates for character input/output, only the _code versions are provided, the rest are given by library(iso_byte_char), using these. Most predicates are provided in two versions: one that specifies the input or output stream as the first argument and a second which omits this argument and uses the current input or output stream.

Usage and interface

Documentation on exports

PREDICATE
get_code(Stream,Code)

Reads from Stream the next character and unifies Code with its character code. At end of stream, unifies Code with the integer -1.

Usage: ISO

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.

PREDICATE
get_code(Code)

Behaves like current_input(S), get_code(S,Code).

Usage: ISO

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.

PREDICATE
get1_code(Stream,Code)

Reads from Stream the next non-layout character (see code_class/2) and unifies Code with its character code. At end of stream, unifies Code with the integer -1.

Usage:

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.

PREDICATE
get1_code(Code)

Behaves like current_input(S), get1_code(S,Code).

Usage:

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.

PREDICATE
peek_code(Stream,Code)

Unifies Code with the character code of the next character of Stream, leaving the stream position unaltered. At end of stream, unifies Code with the integer -1.

Usage: ISO

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.

PREDICATE
peek_code(Code)

Behaves like current_input(S), peek_code(S,Code).

Usage: ISO

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.

PREDICATE
skip_code(Stream,Code)

Skips just past the next character code Code from Stream.

Usage:

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
    (basic_props:int/1)Code is an integer.

PREDICATE
skip_code(Code)

Behaves like current_input(S), skip_code(S,Code).

Usage:

  • The following properties should hold at call time:
    (basic_props:int/1)Code is an integer.

PREDICATE
skip_line(Stream)

Skips from Stream the remaining input characters on the current line. If the end of the stream is reached, the stream will stay at its end. Portable among different operating systems.

Usage:

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.

PREDICATE
skip_line

Behaves like current_input(S), skip_line(S).

PREDICATE
put_code(Stream,Code)

Outputs to Stream the character corresponding to character code Code.

Usage: ISO

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
    (basic_props:int/1)Code is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.
    (native_props:is_det/1)All calls of the form put_code(Stream,Code) are deterministic.

PREDICATE
put_code(Code)

Behaves like current_output(S), put_code(S,Code).

Usage: ISO

  • The following properties should hold at call time:
    (basic_props:int/1)Code is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.
    (native_props:is_det/1)All calls of the form put_code(Code) are deterministic.

PREDICATE
nl(Stream)

Outputs a newline character to Stream. Equivalent to put_code(Stream, 0'\n).

Usage: ISO

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.
    (native_props:is_det/1)All calls of the form nl(Stream) are deterministic.
    (native_props:not_fails/1)All the calls of the form nl(Stream) do not fail.

PREDICATE
nl

Behaves like current_output(S), nl(S).

Usage: ISO

  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.
    (native_props:is_det/1)All calls of the form nl are deterministic.
    (native_props:not_fails/1)All the calls of the form nl do not fail.
    (native_props:relations/2)Goal nl produces 1 solutions.

PREDICATE
tab(Stream,Num)

Outputs Num spaces to Stream.

Usage:

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
    (basic_props:int/1)Num is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.
    (native_props:is_det/1)All calls of the form tab(Stream,Num) are deterministic.

PREDICATE
tab(Num)

Behaves like current_output(S), tab(S,Num).

Usage:

  • The following properties should hold at call time:
    (basic_props:int/1)Num is an integer.
  • The following properties hold globally:
    (basic_props:native/1)This predicate is understood natively by CiaoPP.
    (native_props:is_det/1)All calls of the form tab(Num) are deterministic.

PREDICATE
code_class(Code,Class)

Unifies Class with an integer corresponding to the lexical class of the character whose code is Code, with the following correspondence:

    0 - layout (includes space, newline, tab)
    1 - small letter
    2 - capital letter (including '_')
    3 - digit
    4 - graphic (includes #$&*+-./:<=>?@^\`~ )
    5 - punctuation (includes !;"'%(),[]{|} )
   
Note that in ISO-Prolog the back quote ` is a punctuation character, whereas in Ciao it is a graphic character. Thus, if compatibility with ISO-Prolog is desired, the programmer should not use this character in unquoted names.

Usage:

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Class is an integer.
  • The following properties should hold at call time:
    (basic_props:int/1)Code is an integer.
  • The following properties hold upon exit:
    (basic_props:int/1)Class is an integer.

PREDICATE
getct(Code,Type)

Reads from the current input stream the next character, unifying Code with its character code, and Type with its lexical class. At end of stream, unifies both Code and Type with the integer -1. Equivalent to

   get(Code), (Code = -1 -> Type = -1 ; code_class(Code,Type))
   

Usage:

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
    (basic_props:int/1)Type is an integer.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.
    (basic_props:int/1)Type is an integer.

PREDICATE
getct1(Code,Type)

Reads from the current input stream the next non-layout character, unifying Code with its character code, and Type with its lexical class (which will be nonzero). At end of stream, unifies both Code and Type with the integer -1. Equivalent to

   get1(Code), (Code = -1 -> Type = -1 ; code_class(Code,Type))
   

Usage:

  • Calls should, and exit will be compatible with:
    (basic_props:int/1)Code is an integer.
    (basic_props:int/1)Type is an integer.
  • The following properties hold upon exit:
    (basic_props:int/1)Code is an integer.
    (basic_props:int/1)Type is an integer.

PREDICATE
display(Stream,Term)

Displays Term onto Stream. Lists are output using list notation, the other compound terms are output in functional notation. Similar to write_term(Stream, Term, [ignore_ops(ops)]), except that curly bracketed notation is not used with {}/1, and the write_strings flag is not honored.

Usage:

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
    (basic_props:term/1)Term is any term.
  • The following properties hold upon exit:
    (basic_props:term/1)Term is any term.
  • The following properties hold globally:
    (basic_props:not_further_inst/2)Term is not further instantiated.
    (basic_props:native/1)This predicate is understood natively by CiaoPP.

PREDICATE
display(Term)

Behaves like current_output(S), display(S,Term).

Usage:

  • The following properties should hold at call time:
    (basic_props:term/1)Term is any term.
  • The following properties hold upon exit:
    (basic_props:term/1)Term is any term.
  • The following properties hold globally:
    (basic_props:not_further_inst/2)Term is not further instantiated.
    (basic_props:native/1)This predicate is understood natively by CiaoPP.

PREDICATE
displayq(Stream,Term)

Similar to display(Stream, Term), but atoms and functors that can't be read back by read_term/3 are quoted. Thus, similar to write_term(Stream, Term, [quoted(true), ignore_ops(ops)]), with the same exceptions as display/2.

Usage:

  • The following properties should hold at call time:
    (streams_basic:stream/1)Stream is an open stream.
    (basic_props:term/1)Term is any term.
  • The following properties hold upon exit:
    (basic_props:term/1)Term is any term.
  • The following properties hold globally:
    (basic_props:not_further_inst/2)Term is not further instantiated.

PREDICATE
displayq(Term)

Behaves like current_output(S), displayq(S,Term).

Usage:

  • The following properties should hold at call time:
    (basic_props:term/1)Term is any term.
  • The following properties hold upon exit:
    (basic_props:term/1)Term is any term.
  • The following properties hold globally:
    (basic_props:not_further_inst/2)Term is not further instantiated.

Known bugs and planned improvements

  • Run-time checks have been reported not to work with this code. That means that either the assertions here, or the code that implements the run-time checks are erroneous.