[ Obsolete | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]
autoload_tool(+Library, +ListOfPredSpec )
Declares the predicates in ListOfPredSpec to be autoloading tools from the
module (file) Library.pl.
- +Library
- Atom.
- +ListOfPredSpecList
- of expressions of the form Atom/Integer.
This built-in predicate is obsolete!
Description
Declares the predicates in the list ListOfPredSpec as tools defined in
the file Library. If any of the specified tools is called, the system
looks in the library_path directories for the file Library.pl, compiles
it using lib/1 and re-calls the tool. The file is supposed to contain
a module_interface/1 or begin_module/1 directive at its beginning but it
can be omitted and then Library is used as the module name.
The library file Library.pl must contain a tool/2 call for each of the
specified predicates.
Predicates declared as autoloaded are always defined as global but note
that the module directive in a file erase the module completely so that
the autoloaded procedure (and its visibility) are removed completely
before being recompiled. This means that the global declaration must be
present in the file.
Fail Conditions
None.
Resatisfiable
No.
Exceptions
- (4) instantiation fault
- Library or ListOfPredSpec is not instantiated.
- (5) type error
- Library is instantiated, but not to an atom.
- (5) type error
- ListOfPredSpec is instantiated, but not to a list of expressions of the form Atom/Integer.
- (62) inconsistent procedure redefinition
- a call to PredSpec has already been compiled before the tool declaration (``inconsistent procedure redefinition'').
- (173) library not found
- Library file Library.pl not found. (when calling an autoloaded predicate)
Examples
Success:
[eclipse]: get_flag(library_path, Path),
get_flag(cwd, Cwd),
set_flag(library_path, [Cwd | Path]).
Cwd = "/home/user/"
Path = ["/usr/local/ECLIPSE/lib"]
yes.
[eclipse]: open("my_lib.pl", write, s),
write(s, ":- module(my_lib).\n"),
write(s, ":- global p/0.\n"),
write(s, ":- tool(p/0, writeln/1)."),
close(s).
yes.
[eclipse]: autoload_tool(my_lib, [p/0]).
yes.
[eclipse]: p. % when p/0 is called, the library is
% compiled first, ie. autoloaded.
loading the library /home/user/my_lib.pl
eclipse
yes.
[eclipse]: p. % p/0 is not an autoloaded pred anymore
eclipse
yes.
Error:
autoload_tool(Lib, [p/0]). (Error 4).
autoload_tool(a_lib, L). (Error 4).
autoload_tool("a_lib", [p/0]). (Error 5).
autoload_tool(a_lib, [1]). (Error 5).
autoload_tool(a_lib, p/0). (Error 5).
[eclipse]: [user].
p :- t. % call compiled before tool declaration
user compiled 32 bytes in 0.00 seconds
yes.
[eclipse]: autoload_tool(a_lib, [t/0]). (Error 62).
autoload_tool(not_a_file, [p/0]). (Error 173).
See Also
ensure_loaded / 1, autoload / 2, lib / 1, lib / 2, tool / 1