
The librowser library provides a set of predicates wich enable the user to interactively find Ciao libraries and/or any predicate exported by them.
This is a simple example:
?- apropos(aggregates:'.*find.*'). aggregates:findnsols/5 aggregates:findnsols/4 aggregates:findall/4 aggregates:findall/3 yes ?-
librowser is specially useful when inside GNU Emacs: just place the cursor over a librowser response and press C-cTAB in order to get help on the related predicate. Refer to the "Using Ciao inside GNU Emacs" chapter for further information. 
?- use_module(library(librowser)).
The library requires reading all the available module interfaces. This is done automatically when calling any predicate at librowser, and the entire process will take a little moment. If you want to perform such a process manually you can do:
?- update.
This process to be automatically performed when loading ciaosh including those lines in your .ciaorc personal initialization file.
update/0 will also be automatically called (once) when calling any other predicate at librowser.
Usage:
Creates an internal database of modules at Ciao libraries.
?- browse(M,findall/A). A = 3, M = conc_aggregates ? ; A = 4, M = aggregates ? ; A = 3, M = aggregates ? ; no ?-
Usage:browse(Module,Spec)
Asocciates the given Spec predicate specification with the Module which exports it.
?- where(findall/A). findall/3 exported at module conc_aggregates findall/4 exported at module aggregates findall/3 exported at module aggregates yes ?-
Usage:where(Spec)
Display what module to load in order to import the given Spec.
?- describe(librowser). Predicates at library librowser : apropos/1 describe/1 where/1 browse/2 update/0 yes ?-
Usage:describe(Module)
Display a list of exported predicates at the given Module
?- apropos('write.').
write:writeq/1
write:writeq/2
yes
?- apropos('write.*'/2).
dht_misc:write_pr/2
profiler_auto_conf:write_cc_assertions/2
mtree:write_mforest/2
transaction_concurrency:write_lock/2
transaction_logging:write/2
provrml_io:write_vrml_file/2
provrml_io:write_terms_file/2
unittest_base:write_data/2
write:write_canonical/2
write:writeq/2
write:write/2
write:write_term/2
stream_utils:write_string/2
res_exectime_hlm_gen:write_hlm_indep_each/2
res_exectime_hlm_gen:write_hlm_indep_2/2
res_exectime_hlm_gen:write_hlm_dep/2
oracle_calibration:write_conf/2
bshare_utils:write_string/2
bshare_utils:write_string_list/2
bshare_utils:write_length/2
bshare_utils:write_neg_db_stream/2
bshare_utils:write_neg_db/2
bshare_utils:write_pos_db/2
yes When no predicates are found with the exact search, this predicate will perform a fuzzy search which will find predicates at a distance of one edit, swap, deletion or insertion.
?- apropos('wirte').
Predicate wirte not found. Similar predicates:
transaction_logging:write/2
write:write/1
write:write/2
yes
?- apropos(apend).
Predicate apend not found. Similar predicates:
hprolog:append/2
lists:append/3
llists:append/2
yes
?-Usage:apropos(RegSpec)
This will search any predicate specification Spec which matches the given RegSpec incomplete predicate specification.
apropos_spec(Pattern) :-
    atm(Pattern).
apropos_spec(Pattern/Arity) :-
    atm(Pattern),
    int(Arity).
apropos_spec(Module:Pattern/Arity) :-
    atm(Pattern),
    atm(Module),
    int(Arity).
apropos_spec(Module:Pattern) :-
    atm(Pattern),
    atm(Module).
Usage:apropos_spec(S)
S is a predicate specification Pattern, Pattern/Arity, Module:Pattern, Module:Pattern/Arity.