prolog!() { /* proc-macro */ }Expand description
Define prolog predicates to be used from rust code.
The prolog! macro takes a block of function declaration. Each
declaration is of the format fn <predicate>(..args..);, where
args is a list of argument names. Optionally, a visibility
specifier like pub may be used. This much like an ordinary rust
function declaration, except that the arguments are typeless.
Each function may be annotated with a #[name("..name..")]
attribute, which specifies what the name of this predicate is in
prolog. When omitted, the function name will be used.
Each function may be annotated with a #[module("..module..")]
attribute, which specifies what prolog module this predicate is
in.  When omitted, no module is assumed.
For each function declaration, a function will be generated which takes a context argument, followed by all declared arguments, and returns a query opened in that context.
Example:
prolog! {
    fn writeq(term);
    #[name("nl")]
    fn print_a_newline();
    #[module("zlib")]
    pub fn zopen(stream, zstream, options);
}