doc changes

This commit is contained in:
Vítor Santos Costa 2014-11-02 12:10:32 +00:00
parent dce3e7a1bc
commit c440ab239b
6 changed files with 245 additions and 168 deletions

View File

@ -367,7 +367,7 @@ SUBGROUPING = YES
# SEPARATE_MEMBER_PAGES. # SEPARATE_MEMBER_PAGES.
# The default value is: NO. # The default value is: NO.
INLINE_GROUPED_CLASSES = NO INLINE_GROUPED_CLASSES = YES
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in # with only public data fields or simple typedef fields will be shown inline in
@ -551,7 +551,7 @@ SORT_MEMBER_DOCS = YES
# this will also influence the order of the classes in the class list. # this will also influence the order of the classes in the class list.
# The default value is: NO. # The default value is: NO.
SORT_BRIEF_DOCS = NO SORT_BRIEF_DOCS = YES
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and # (brief and detailed) documentation of class members so that constructors and
@ -563,7 +563,7 @@ SORT_BRIEF_DOCS = NO
# detailed member documentation. # detailed member documentation.
# The default value is: NO. # The default value is: NO.
SORT_MEMBERS_CTORS_1ST = NO SORT_MEMBERS_CTORS_1ST = yes
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will # of group names into alphabetical order. If set to NO the group names will
@ -655,7 +655,7 @@ SHOW_FILES = YES
# Folder Tree View (if specified). # Folder Tree View (if specified).
# The default value is: YES. # The default value is: YES.
SHOW_NAMESPACES = NO SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that # The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from # doxygen should invoke to get the current version for each file (typically from
@ -771,7 +771,6 @@ WARN_LOGFILE =
INPUT = foreigns.yap docs/yap.md pl swi C H include os packages library CXX OPTYap INPUT = foreigns.yap docs/yap.md pl swi C H include os packages library CXX OPTYap
# This tag can be used to specify the character encoding of the source files # This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
@ -1602,7 +1601,7 @@ MAKEINDEX_CMD_NAME = makeindex
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO COMPACT_LATEX = YES
# The PAPER_TYPE tag can be used to set the paper type that is used by the # The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer. # printer.
@ -1723,7 +1722,9 @@ GENERATE_RTF = NO
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. # it.
# The default directory is: rtf. # The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES. # This tag requires that the tag GENERATE_RTb
F is set to YES.
RTF_OUTPUT = rtf RTF_OUTPUT = rtf

View File

@ -252,7 +252,7 @@ You can also use the CUDD interface package in YAP. You will need to
2. If a Mac user, there is a ports package. 2. If a Mac user, there is a ports package.
3 Otherwise, you can obtain the version at . This version compiles under WIN32. 3. Otherwise, you can obtain the version at . This version compiles under WIN32.
Last, when you configure YAP you need to add the options --with-cidd --enable-bddlib. Binary distributed versions already have the interface. Last, when you configure YAP you need to add the options --with-cidd --enable-bddlib. Binary distributed versions already have the interface.
@ -291,8 +291,10 @@ Instead of probabilities every fact has a t( ) prefix. The t stands for tunable
~~~~ ~~~~
t(0.5)::heads(_). t(0.5)::heads(_).
~~~~ ~~~~
*/
### ProbLog Predicates /** @defgroup ProbLogPredicates ProbLog Predicates
@ingroup ProbLog1
This chapter describes the predicates defined by ProbLog for evaluating the probability of queries. This chapter describes the predicates defined by ProbLog for evaluating the probability of queries.
@ -347,8 +349,12 @@ This predicate returns the lower and upper bound of the probability of achieving
This predicate returns the lower bound of the probability of achieving the goal G obtained by cutting the sld tree at the given probability for each branch. This predicate returns the lower bound of the probability of achieving the goal G obtained by cutting the sld tree at the given probability for each branch.
*/ */
%% @}
/** /**
### ProbLog Parameter Learning Predicates @defgroup ProbLogParameterLearning ProbLog Parameter Learning Predicates
@ingroup ProbLog1
@{
*/ */
/** /**
@ -371,7 +377,7 @@ Test examples are ignored during learning but are used afterwards to check the p
* @pred do_learning(+N). * @pred do_learning(+N).
* *
Starts the learning algorithm with N iterations. Starts the learning algorithm with N iterations.
paragraph{}
*/ */
/** /**
@ -381,7 +387,15 @@ The output is created in the output subfolder of the current folder where YAP wa
Starts the learning algorithm. The learning will stop after N iterations or if the difference of the Mean Squared Error (MSE) between two iterations gets smaller than Epsilon - depending on what happens first. Starts the learning algorithm. The learning will stop after N iterations or if the difference of the Mean Squared Error (MSE) between two iterations gets smaller than Epsilon - depending on what happens first.
### Miscelaneous */
%% @}
/** @defgroup ProbLogMiscellaneous ProbLog Miscellaneous Predicates
@ingroup ProbLog1
@{
Both the learning and the inference module have various parameters, or flags, that can be adjusted by the user. Both the learning and the inference module have various parameters, or flags, that can be adjusted by the user.
The following predicates are defined by ProbLog to access and set these flags. The following predicates are defined by ProbLog to access and set these flags.
@ -395,11 +409,9 @@ This predicate lists all the flags name, value, domain and description.
*/ */
/** /** @pred problog_flag(+Name, -Value)
* @pred problog_flag(+Name, -Value)
*
This predicate gives the value of the flag with the specified name. The supported flags are:
This predicate gives the value of the flag with the specified name. The supported flags are:
+ use_db_trie + use_db_trie
@ -461,7 +473,7 @@ The possible values for this flag are true or false.
Flag that sets the representation of the ancestor list. Flag that sets the representation of the ancestor list.
The possible values for this flag are list or integer The possible values for this flag are list or integer
+ max\cccccccccccc_depth + max_depth
Sets the maximum proof depth. Sets the maximum proof depth.
The possible values for this flag are any integer. The possible values for this flag are any integer.
@ -478,8 +490,7 @@ The possible values for this flag are any integer greater than zero.
+ min_mc_samples + min_mc_samples
Flag related to Monte Carlo Sampling that sets the minimum number of samples before convergence. Flag related to Monte Carlo Sampling that sets the minimum number of samples before convergence. The possible values for this flag are any integer greater than or equal to zero.
The possible values for this flag are any integer greater than or equal to zero.
+ max_mc_samples + max_mc_samples
@ -591,6 +602,8 @@ The possible values for this flag are true or false.
Flag telling the location of the output files directory. Flag telling the location of the output files directory.
The possible values for this flag are any valid directory name. The possible values for this flag are any valid directory name.
*/
/** @pred set_problog_flag(+Name, +Value) /** @pred set_problog_flag(+Name, +Value)
the predicate sets the value of the given flag. The supported flags are the ones listed in above the predicate sets the value of the given flag. The supported flags are the ones listed in above
@ -601,7 +614,7 @@ the predicate sets the value of the given flag. The supported flags are the ones
the predicate sets the value of the given flag. The supported flags are the ones listed in above the predicate sets the value of the given flag. The supported flags are the ones listed in above
*/ */
/** @pred learning_flag(+Name, -Value)} /** @pred learning_flag(+Name, -Value)
This predicate gives the value of the learning flag with the specified name. The supported flags are: This predicate gives the value of the learning flag with the specified name. The supported flags are:

View File

@ -146,10 +146,11 @@ statistics from the MYDDAS system;
This option is only available in MySQL. It enables the option to interact with the MySQL server in This option is only available in MySQL. It enables the option to interact with the MySQL server in
two different ways. As if we were on the MySQL Client Shell, and as if two different ways. As if we were on the MySQL Client Shell, and as if
we were using Datalog. we were using Datalog.
@}
*/ */
%% @}
/** @defgroup MYDDAS_Architecture MYDDAS Architecture /** @defgroup MYDDAS_Architecture MYDDAS Architecture
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
@ -202,15 +203,18 @@ FROM 'phonebook' A
WHERE A.Name = 'John Doe'; WHERE A.Name = 'John Doe';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@}
*/ */
%% @}
/** @defgroup View_Level_Interface View Level Interface /** @defgroup View_Level_Interface View Level Interface
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
*/
/**
@pred db view(+,+,+). @pred db view(+,+,+).
@ -302,16 +306,17 @@ FROM Edge A WHERE A.attr1 = 10;
To know how to use db `view/3`, please refer to Draxler's Prolog to To know how to use db `view/3`, please refer to Draxler's Prolog to
SQL Compiler Manual. SQL Compiler Manual.
@}
*/ */
%% @}
/** @defgroup Accessing_Tables_in_Data_Sources_Using_SQL Accessing Tables in Data Sources Using SQL /** @defgroup Accessing_Tables_in_Data_Sources_Using_SQL Accessing Tables in Data Sources Using SQL
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
@pred db_sql(+,+,?). */
/** @pred db_sql(+,+,?).
@ -336,12 +341,17 @@ Example:
LA = ['D','John Doe',123456789] ? LA = ['D','John Doe',123456789] ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@section Insertion_of_Rows Insertion of Rows */
@pred db_assert(+,+). %% @}
/** @defgroup Insertion_of_Rows Insertion of Rows
@ingroup MYDDAS
@{
*/
/** @pred db_assert(+,+).
@pred db_assert(+). @pred db_assert(+).
@ -385,10 +395,9 @@ yes
Would insert the row: `A,null value,31` into the relation Would insert the row: `A,null value,31` into the relation
`Hello World`, assuming that the second row allows null values. `Hello World`, assuming that the second row allows null values.
@pred db insert(+,+,+). */
/** @pred db insert(+,+,+).
@pred db insert(+,+). @pred db insert(+,+).
@ -412,15 +421,17 @@ yes
yes yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@}
*/ */
%% @}
/** @defgroup Types_of_Attributes Types of AttributesL /** @defgroup Types_of_Attributes Types of AttributesL
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
@pred db_get_attributes_types(+,+,?). */
/** @pred db_get_attributes_types(+,+,?).
@ -448,20 +459,18 @@ yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
where <tt>Hello World</tt> is the name of the relation and <tt>myddas</tt> is the where <tt>Hello World</tt> is the name of the relation and <tt>myddas</tt> is the
connection identifier. connection identifier.
@}
*/ */
%% @}
/** @defgroup Number_of_Fields Number of Fields /** @defgroup Number_of_Fields Number of Fields
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
@pred db_number_of_fields(+,?). */
/** @pred db_number_of_fields(+,?).
@pred db_number_of_fields(+,+,?). @pred db_number_of_fields(+,+,?).
@ -486,18 +495,18 @@ where `Hello World` is the name of the
relation and `myddas` is the connection identifier. relation and `myddas` is the connection identifier.
@}
*/ */
%% @}
/** @defgroup Describing_a_Relation Describing a Relation /** @defgroup Describing_a_Relation Describing a Relation
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
@pred db_datalog_describe(+,+). */
/** @pred db_datalog_describe(+,+).
@pred db_datalog_describe(+). @pred db_datalog_describe(+).
@ -518,7 +527,9 @@ command, the same way as `DESCRIBE` in the MySQL prompt would.
yes yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@pred db_describe(+,+). */
/** @pred db_describe(+,+).
@ -538,15 +549,17 @@ no
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@}
*/ */
%% @}
/** @defgroup Enumerating_Relations Enumeration Relations Describing_a_Relation Describing a Relation /** @defgroup Enumerating_Relations Enumeration Relations Describing_a_Relation Describing a Relation
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
@pred db_datalog_show_tables(+). */
/** @pred db_datalog_show_tables(+).
@pred db_datalog_show_tables @pred db_datalog_show_tables
@ -565,7 +578,9 @@ it does not returns any value, but instead prints to the screen the result of th
yes yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@pred db_show_tables(+, ?). */
/** @pred db_show_tables(+, ?).
@ -584,19 +599,19 @@ Table = table('Hello World') ? ;
no no
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@}
*/ */
%%@}
/** @defgroup The_MYDDAS_MySQL_Top_Level The MYDDAS MySQL Top Level /** @defgroup The_MYDDAS_MySQL_Top_Level The MYDDAS MySQL Top Level
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
*/
/**
@pred db_top_level(+,+,+,+,+). @pred db_top_level(+,+,+,+,+).
@pred db_top_level(+,+,+,+). @pred db_top_level(+,+,+,+).
@ -644,18 +659,19 @@ Bye
yes yes
?- ?-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@}
*/ */
%%@}
/** @defgroup Other_MYDDAS_Properties Other MYDDAS Properties /** @defgroup Other_MYDDAS_Properties Other MYDDAS Properties
@ingroup MYDDAS @ingroup MYDDAS
@{ @{
*/
/**
@pred db_verbose(+). @pred db_verbose(+).
@pred db_top_level(+,+,+,+).
When we ask a question to YAP, using a predicate asserted by When we ask a question to YAP, using a predicate asserted by
@ -670,8 +686,16 @@ yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If we want to If we want to
disable this feature, we must call the `db_verbose/1` predicate with the value 0. disable this feature, we must call the `db_verbose/1` predicate with the value 0.
\
*/
@pred db_module(?). /**
@pred db_top_level(+,+,+,+).
*/
/** @pred db_module(?).
@ -707,11 +731,9 @@ yes
?- ?-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@pred db_my_result_set(?). */
/** @pred db_my_result_set(?).
The MySQL C API permits two modes for transferring the data generated by The MySQL C API permits two modes for transferring the data generated by
a query to the client, in our case YAP. The first mode, and the default a query to the client, in our case YAP. The first mode, and the default
@ -736,7 +758,9 @@ After this command, all
of the database predicates will use use result by default. We can change of the database predicates will use use result by default. We can change
this by doing again `db_my_result_set(store_result)`. this by doing again `db_my_result_set(store_result)`.
@pred db_my_sql_mode(+Conn,?SQL_Mode). */
/** @pred db_my_sql_mode(+Conn,?SQL_Mode).
@ -758,6 +782,8 @@ You can see the available SQL Modes at the MySQL homepage at
*/ */
%% @}
#ifdef MYDDAS_TOP_LEVEL #ifdef MYDDAS_TOP_LEVEL
:- use_module(myddas_top_level,[ :- use_module(myddas_top_level,[
db_top_level/4, db_top_level/4,

View File

@ -24,25 +24,8 @@
*/ */
/** @pred :_P_ , :_Q_ is iso
Conjunction of goals (and).
Example:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p(X) :- q(X), r(X).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
should be read as "p( _X_) if q( _X_) and r( _X_)".
*/
/** @pred :_P_ ; :_Q_ is iso /** @pred :_P_ ; :_Q_ is iso
Disjunction of goals (or). Disjunction of goals (or).
Example: Example:
@ -56,7 +39,7 @@ should be read as "p( _X_) if q( _X_) or r( _X_)".
*/ */
/** @pred \+ :_P_ is iso /** @pred \+ :_P_ is iso
Negation by failure.
Goal _P_ is not provable. The execution of this predicate fails if Goal _P_ is not provable. The execution of this predicate fails if
and only if the goal _P_ finitely succeeds. It is not a true logical and only if the goal _P_ finitely succeeds. It is not a true logical
@ -65,12 +48,19 @@ negation, which is impossible in standard Prolog, but
This predicate might be defined as: This predicate might be defined as:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
\+(P) :- P, !, fail. \+(P) :- P, !, fail.
\+(_). \+(_).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
if _P_ did not include "cuts". if _P_ did not include "cuts".
If _P_ includes cuts, the cuts are defined to be scoped by _P_: they canno cut over the calling prredicate.
~~~~~~~~~~~~
go(P).
:- \+ P, !, fail.
\+(_).
~~~~~~~~~~~~
*/ */
@ -89,7 +79,7 @@ versions of YAP. Uses of not/1 should be replaced by
/** @pred :_P_ -> :_Q_ is iso /** @pred :_Condition__ -> :_Action_ is iso
Read as "if-then-else" or "commit". This operator is similar to the Read as "if-then-else" or "commit". This operator is similar to the
@ -137,13 +127,18 @@ arguments.
*/ */
/** @pred :_Condition_ *-> :_Action_ /** @pred :_Condition_ *-> :_Action_ is iso
This construct implements the so-called <em>soft-cut</em>. The control is This construct implements the so-called <em>soft-cut</em>. The control is
defined as follows: If _Condition_ succeeds at least once, the defined as follows:
semantics is the same as ( _Condition_, _Action_). If + If _Condition_ succeeds at least once, the
semantics is the same as ( _Condition_, _Action_).
+ If
_Condition_ does not succeed, the semantics is that of (\\+ _Condition_ does not succeed, the semantics is that of (\\+
_Condition_, _Else_). In other words, If _Condition_ _Condition_, _Else_).
In other words, if _Condition_
succeeds at least once, simply behave as the conjunction of succeeds at least once, simply behave as the conjunction of
_Condition_ and _Action_, otherwise execute _Else_. _Condition_ and _Action_, otherwise execute _Else_.
@ -219,11 +214,7 @@ private(_).
% %
% boootstrap predicates. % boootstrap predicates.
% %
:- system_module( '$_boot', [(*->)/2, :- system_module( '$_boot', [
(',')/2,
(->)/2,
(;)/2,
(\+)/1,
bootstrap/1, bootstrap/1,
call/1, call/1,
catch/3, catch/3,
@ -234,8 +225,7 @@ private(_).
(not)/1, (not)/1,
repeat/0, repeat/0,
throw/1, throw/1,
true/0, true/0], ['$$compile'/4,
('|')/2], ['$$compile'/4,
'$call'/4, '$call'/4,
'$catch'/3, '$catch'/3,
'$check_callable'/2, '$check_callable'/2,
@ -299,8 +289,9 @@ private(_).
% %
% %
% %
/** @pred true is iso
/** @pred true is iso
Succeed.
Succeeds once. Succeeds once.
@ -1137,6 +1128,19 @@ incore(G) :- '$execute'(G).
'$stop_creeping'. '$stop_creeping'.
/** @pred :_P_ , :_Q_ is iso, meta
Conjunction of goals (and).
The conjunction is a fundamental construct of Prolog. Example:
~~~~~~~
p(X) :- q(X), r(X).
~~~~~~~
should be read as `p( _X_) if q( _X_) and r( _X_).
*/
','(X,Y) :- ','(X,Y) :-
yap_hacks:env_choice_point(CP), yap_hacks:env_choice_point(CP),
'$current_module'(M), '$current_module'(M),
@ -1576,4 +1580,3 @@ log_event( String, Args ) :-
/** /**
@} @}
*/ */

View File

@ -1506,6 +1506,17 @@ import_module(Mod, ImportModule) :-
import_module(Mod, EM) :- import_module(Mod, EM) :-
'$do_error'(type_error(atom,Mod),import_module(Mod, EM)). '$do_error'(type_error(atom,Mod),import_module(Mod, EM)).
/** add_import_module( + _Module_, + _ImportModule_ , +_Pos_) is det
Add all exports in _ImportModule_ as available to _Module_.
All exported predicates from _ExportModule_ are made available to the
source module _ImportModule_. If _Position_ is bound to `start` the
module _ImportModule_ is tried first, if _Position_ is bound to `end`,
the module is consulted last.
*/
add_import_module(Mod, ImportModule, Pos) :- add_import_module(Mod, ImportModule, Pos) :-
var(Mod), var(Mod),
'$do_error'(instantiation_error,add_import_module(Mod, ImportModule, Pos)). '$do_error'(instantiation_error,add_import_module(Mod, ImportModule, Pos)).
@ -1526,6 +1537,14 @@ add_import_module(Mod, ImportModule, Pos) :-
add_import_module(Mod, ImportModule, Pos) :- add_import_module(Mod, ImportModule, Pos) :-
'$do_error'(domain_error(start_end,Pos),add_import_module(Mod, ImportModule, Pos)). '$do_error'(domain_error(start_end,Pos),add_import_module(Mod, ImportModule, Pos)).
/** delete_import_module( + _ExportModule_, + _ImportModule_ ) is det
Exports in _ImportModule_ are no longer available to _Module_.
All exported predicates from _ExportModule_ are discarded from the
ones used vy the source module _ImportModule_.
*/
delete_import_module(Mod, ImportModule) :- delete_import_module(Mod, ImportModule) :-
var(Mod), var(Mod),
'$do_error'(instantiation_error,delete_import_module(Mod, ImportModule)). '$do_error'(instantiation_error,delete_import_module(Mod, ImportModule)).
@ -1548,6 +1567,21 @@ delete_import_module(Mod, ImportModule) :-
'$set_source_module'(Source0, SourceF) :- '$set_source_module'(Source0, SourceF) :-
current_module(Source0, SourceF). current_module(Source0, SourceF).
/** module_property( + _Module_, ? _Property_ ) is nondet
Enumerate non-deterministically the main properties of _Module_ .
Reports the following properties of _Module_:
+ `class`( ?_Class_ ): whether it is a `system`, `library`, or `user` module.
+ `line_count`(?_Ls_): number of lines in source file.
+ `file`(?_F_): source file for _Module_.
+ `exports`(-Es): list of all predicate symbols and
operator symbols exported or re-exported by this module.
*/
module_property(Mod, class(L)) :- module_property(Mod, class(L)) :-
'$module_class'(Mod, L). '$module_class'(Mod, L).
module_property(Mod, line_count(L)) :- module_property(Mod, line_count(L)) :-