- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
//[[Documentation]]
LMNtal Java allows inline code written in Java, and SLIM allows LMNtal programs to call C functions.
*Foreign-Language Interface in SLIM
SLIM allows LMNtal programs to call functions written in C. An LMNtal atom
|'$callback'('''function_name''', '''arg1''', '''arg2''', ...)|
>'$callback'('''function_name''', '''arg1''', '''arg2''', ...)
calls the C function '''function_name''' with the specified arguments. Examples of callbacks can be found in the library programs located in the $LMNTAL_HOME/lib directory, and the corresponding C functions can be found in the $LMNTAL_HOME/src/ext directory.
*Foreign-Language Interface in Java
**Syntax
inline_define atom
[:/*inline_define*/ inline_define_code_in_Java :]
inline atom
[:/*inline*/ inline_code_in_Java :](X1,...,Xn)
An '''inline_define atom''' is an atom of the form
>[:/*inline_define*/ '''inline_define_code_in_Java''' :] .
An '''inline atom''' is an atom of the form
>[:/*inline*/ '''inline_code_in_Java''' :](X1,...,Xn) .
**Specification
The execution of inline code takes place
immediately after the rewriting task of the rule
that creates the inline atom is finished.
Defined variables:
me .... the inline atom itself
mem ... me.getMem()
Two defined variables can be used in the Java code in an inline atom:
>''me'' ... the inline atom itself;~
>''mem'' ... me.getMem().
**Examples
[:/*inline_define*/class Foo { static int counter = 0; } :].
[:/*inline*/System.out.println(me.nthAtom(0).getName());
me.remove();
me.nthAtom(0).remove();:]("LMNtal\n")
% ==> prints LMNtal
hello(X) :- [:/*inline*/
Atom a = mem.newAtom(new Functor("ok",1));
me.remove();
mem.relink(a,0,me,0);:](X).
hello(there).
% ==> ok(there)