This is based on a reply by Jan W.
Prolog code often contains directives like :- use_module(library(clpfd)).
To see all of the possible places that library
will use run this query.
absolute_file_name(library('.'), Dir, [file_type(directory), access(write), solutions(all)]).
Example output (Click triangle to expand)
Note: I have a lot of SWI-Prolog packs installed so this list is probably much larger than your result.
?- absolute_file_name(library('.'), Dir, [file_type(directory), access(write), solutions(all)]).
Dir = 'c:/program files/swipl/library' ;
Dir = 'c:/program files/swipl/library/clp' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/bio_analytics/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/bio_db/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/bio_db_repo/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/body_reordering/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/callgraph/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/chess_db/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/clitable/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/cli_table/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/dcg4pt/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/dcgutils/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/debug_call/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/delay/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/dictoo/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/djson/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/dpath/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/edcg/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/fileutils/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/fnotation/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/func/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/function_expansion/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/genutils/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/graphql/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/gvar_syntax/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/gvterm/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/instant_prolog_docs/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/interpolate/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/lambda/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/lib/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/list_util/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/logicmoo_utils/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/markdown/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/mathml/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/matrix/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/mtx/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/multimodal_dcg/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/options/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/os_lib/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/pack_errors/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/pfc/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/pljulia/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/pl_omdb/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/predicate_streams/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/prolog_graphviz/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/prolog_imagemagick/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/prolog_library_collection/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/prolog_rdf/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/prolog_uriparser/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/prosqlite/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/pubmed/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/quickcheck/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/rdet/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/rdfs2pl/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/real/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/refactor/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/regex/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/reif/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/resp/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/rocksdb/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/slack_prolog/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/sldnfdraw/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/sparqlprog/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/stoics_lib/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/swipe/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/switex/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/tap/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/typedef/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/uri_qq/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/wgraph/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/xlibrary/prolog' ;
Dir = 'c:/users/groot/appdata/local/swi-prolog/pack/xtools/prolog' ;
Dir = 'c:/program files/swipl/xpce/prolog/lib'.
As many of us know Operating Systems have environment variables such as PATH that are used to find executable files.
SWI-Prolog has something similar with absolute_file_name/2,3.
This is most commonly seen and used with use_module/1,2 as a directive (:-
), e.g.
:- use_module(library(clpfd)).
What many new to using SWI-Prolog don’t know is that the alias library
is like the environment variable PATH
.
From absolute_file_name/3
Convert the given file specification into an absolute path. Spec is a term Alias(Relative) (e.g.,
(library(lists)
), a relative filename or an absolute filename. The primary intention of this predicate is to resolve files specified as Alias(Relative). This predicate only returns non-directories , unless the optionfile_type(directory)
is specified. Option is a list of options to guide the conversion:
To see the current set of values for Alias
use the query
setof(Name,(Dir^file_search_path(Name,Dir)),Names).
Example output (Click triangle to expand)
Note: This query adds ;true
so that the whole answer can be seen.
See: Help: I want the whole answer
From SWI-Prolog installed on Windows 10
?- setof(Name,(Dir^file_search_path(Name,Dir)),Names);true.
Names = [app_config, app_data, app_preferences, autoload, common_app_config, common_app_data, foreign, library, pack, path, pce, swi, user_app_config, user_app_data, user_profile] ;
true.
From SWI-Prolog installed on Ubuntu 20.04 running on WSL 2.
?- setof(Name,(Dir^file_search_path(Name,Dir)),Names);true.
Names = [app_config, app_data, app_preferences, autoload, foreign, library, pack, path, pce, swi, user_app_config, user_profile] ;
true.
To add items to an Alias
use file_search_path/2.
Another very useful Alias
to add is for your own app which is typically named myapp
.
(ref 1) (ref 2)
Personal notes
Ran into this variation that uses a module name with the Alias. (ref)
:- use_module(pengine_sandbox:domain_predicates).
As I don’t fully understand it, can’t really comment on it. So noting here for others that are looking for a deeper understanding.