//[[Documentation]]

*Library Reference

Note: the LMNtal API is under development and its specification
is subject to change.

In the following, arguments with the '+' sign are those consumed upon
reaction with the library atoms, while arguments with the '-' sign are
those generated by the library API.  The slash (/) notation is used to
indicate the arity of atoms.

**Library nlmem

The library nlmem (nonlinear membrane) contains an implementation of
the following rule '''schemes''' that use aggregates:

 R=nlmem.copy(X,a), {$p[X|*Z]} :-
    R=copied(X1,X2),
    {$p[X1|*Z1]}, {$p[X2|*Z2]},
    a(*Z1,*Z2,*Z).
 nlmem.kill(X,b), {$p[X|*Z]} :- b(*Z).

They are rule schemes in the sense that '''a''' and '''b''' are metasymbols to be replaced by any symbolic names.

:nlmem.copy(+{'''P'''},+'''a''',-'''R''')|
An abbreviated form of
&color(#8B4513){(nlmem.copy('''R0''','''a''','''R'''), {+'''R0''','''P'''})};.
Creates two copies of the
cell {+'''R0''','''P'''} with all its free links renamed, and
connects '''R''' and the two fresh copies of '''R0''' using
a ternary atom with the name '''a'''.
Furthermore, for each free link '''L''' of the original cell
{+'''R0''', '''P'''} (except '''R0''' that will disappear together with the '+'), nlmem.copy
connects the two fresh copies of '''L''' and
the original '''L''' via the ternary atom '''a'''.
:nlmem.copy(+{'''P'''},-'''R''')|Same as &color(#8B4513){{nlmem.copy({'''P'''},copied,'''R''')};.
:nlmem.kill(+{'''P'''},+'''b''')|
An abbreviated form of
&color(#8B4513){(nlmem.kill('''R0''','''b'''), {+'''R0''','''P'''})};.
Connects each free link '''L''' of the cell
{+'''R0''', '''P'''} (except '''R0''' that will disappear together with the '+') to the unary atom '''b'''.
:nlmem.kill(+{'''P'''})|Same as &color(#8B4513){nlmem.kill({'''P'''},killed)};.



**Library io (SLIM)

Input/output in SLIM is done through ports.  An operation on
a port will return a new port to be used for future operations on the port.

:io.stdin(-RetRort)| Returns a standard input port.
:io.stdout(-RetRort)| Returns a standard output port.
:io.read_line(+Port,-RetRort,-Str)| Read a single line Str from the input
port Port and returns a new port RetRort.
:io.read_char(+Port,-RetRort,-C)| Read a character C from the input
port Port and returns a new port RetRort.
:io.close_port(+Port,-RetRort)| Close Port and returns it as RetRort.
Further operations on the port will cause an error.
:io.free_port(+Port)|  Frees Port.
:io.print_char(+Port,+C,-RetRort)|  Print a character C to Port and
return a new port RetRort.
:io.print(+Port,+Str,-RetRort)| Print a string Str to Port and
return a new port RetRort.
:io.print_newline(+Port,-RetRort)|  Print a newline to Port and
return a new port RetRort.
:io.print_line(+Port,+Str,-RetRort)| Print a string Str and a newline
to Port and return a new port RetRort.
:io.print_mem(+Port,+M,-RetRort)|  Print the content of the membrane M
to Port and return a new port RetRort.
:io.open_output_string(-SRetRort)|  Creates a new string output port SRetRort.
:io.open_input_string(+Str,-SRetRort)|  Creates a new string input port
SRetRort consisting of the characters in the string Str.
:io.output_string(+Port,-RetRort,-Str)|  Dumps the content of the
string port Port and returns it as RetRort.


//**Library io (LMNtal Java)

//:io.popup(+Str)| Displays the string Str in a pop-up window.
//:io.input| Reads an atom name typed into a pop-up window.  The result is a new nullary atom with the given name.
//:io.input(+Atom)| Displays the name of the unary Atom on a pop-up window and reads an atom name typed into the window.
//The result is a two-atom molecule with done/1 and a unary atom with the given name.
//:io.input(+Atom,-X)| Dislays the name of the unary Atom on a pop-up window and reads an atom name typed into the window.
//The result is a two-atom radical with done/2 and a unary atom with the given name, of the form newAtom(Y), done(Y,X).
//:io.inputInteger(+Atom,-X)| Same as above, except that the result is Int(X), where Int is an integer (which is a unary atom in LMNtal) that has been typed in.
//:io.use| Enables the use of standard input (System.in) and standard output (System.out).  The result consists of two molecules representing standard input and standard output.
//:io.readline(-Atom,-Res)| reads one line from standard input, connnecting to Atom a unary atom whose name is the input string (or an empty string if the string can't be read), and connects done/1 or nil/1 to Res, depending on whether the string could be read.  To be used with io.use.
//:io.print(+Atom,-Res)| prints the name of the unary Atom (a string or a non-string atom) into standard output, and connects done/1 to Res.  To be used witn io.use.

Front page List of pages Search Recent changes Backup   Help   RSS of recent changes