From 9ea75834ff478616fa04127b3e9126a7dcc5d69d Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Tue, 22 May 2018 12:23:52 +0100 Subject: [PATCH] docs & compilation --- CXX/yapi.cpp | 5 +- H/YapGFlagInfo.h | 1163 +++++++++++++++++----------------- cmake/FindR.cmake | 14 +- docs/Doxyfile.in | 34 +- packages/real/CMakeLists.txt | 231 +------ pl/control.yap | 23 +- 6 files changed, 623 insertions(+), 847 deletions(-) diff --git a/CXX/yapi.cpp b/CXX/yapi.cpp index 76aad64a0..6b2ab35bc 100644 --- a/CXX/yapi.cpp +++ b/CXX/yapi.cpp @@ -556,10 +556,9 @@ bool YAPEngine::mgoal(Term t, Term tmod) { std::cerr << "Exception received by " << __func__ << "( " << YAPError(LOCAL_CommittedError).text() << ").\n Forwarded...\n\n"; + YAP_LeaveGoal(result, &q); + // free(LOCAL_CommittedError); - LOCAL_CommittedError->errorNo = YAP_NO_ERROR; - LOCAL_ActiveError->errorNo = YAP_NO_ERROR; - LOCAL_CommittedError = nullptr; return false; } } diff --git a/H/YapGFlagInfo.h b/H/YapGFlagInfo.h index 848f54e12..a964d5cd1 100644 --- a/H/YapGFlagInfo.h +++ b/H/YapGFlagInfo.h @@ -8,10 +8,8 @@ * * ************************************************************************** * * - * File: YapGFlagInfo.h * - * Last rev: * - * mods: * - * comments: global flag enumeration. * + * File: YapGFlagInfo.h * Last rev: + ** mods: * comments: global flag enumeration. * * * *************************************************************************/ @@ -24,601 +22,588 @@ @brief global flags and their values. */ - START_GLOBAL_FLAGS - - /** - `address_bits` - Number of address bits in the machine, either 64 or 32 bits +START_GLOBAL_FLAGS + +YAP_FLAG(ADDRESS_BITS_FLAG, "address_bits", false, nat, BITNESS, NULL), /**< + Number of address bits in the machine, either 64 or 32 bits. */ - YAP_FLAG(ADDRESS_BITS_FLAG, "address_bits", false, nat, BITNESS, NULL), - /**< `agc_margin` - An integer: if this amount of atoms has been created since the last - atom-garbage collection, perform atom garbage collection at the first - opportunity. Initial value is 10,000. May be changed. A value of 0 - (zero) disables atom garbage collection. - */ - YAP_FLAG(AGC_MARGIN_FLAG, "agc_margin", true, nat, "10000", - agc_threshold), + YAP_FLAG(AGC_MARGIN_FLAG, "agc_margin", true, nat, "10000", + agc_threshold), /**< - /**< `allow_assert_for_static_predicates` allow asserting and retracting clauses of static - predicates. */ - YAP_FLAG(ALLOW_ASSERT_FOR_STATIC_PREDICATES, - "allow_assert_for_static_predicates", true, booleanFlag, "true", - NULL), +An integer: if this amount of atoms has been created since the last +atom-garbage collection, perform atom garbage collection at the first +opportunity. Initial value is 10,000. May be changed. A value of 0 +(zero) disables atom garbage collection. +*/ - /**< `allow_variable_name_as_functor` boolean flag allows constructs such as - ~~~ - Tree(Node(L,node,R)) :- - Tree(L), - Tree(R). - ~~~ - */ - YAP_FLAG( ALLOW_VARIABLE_NAME_AS_FUNCTOR_FLAG, "allow_variable_name_as_functor", false, booleanFlag, "false", NULL), + YAP_FLAG(ALLOW_ASSERT_FOR_STATIC_PREDICATES, + "allow_assert_for_static_predicates", true, booleanFlag, "true", + NULL), /**< + boolean: allow asserting and retracting clauses of static + predicates. */ + + YAP_FLAG(ALLOW_VARIABLE_NAME_AS_FUNCTOR_FLAG, + "allow_variable_name_as_functor", false, booleanFlag, "false", + NULL), /**< + + boolean flag allows syntax such + as + ~~~ + Tree(Node(L,node,R)) :- + Tree(L), + Tree(R). + ~~~ + */ + + /**< `answer_format` how to present answers, default is `~p`. */ + YAP_FLAG(ANSWER_FORMAT_FLAG, "answer_format", true, isatom, "~p", NULL), - /**< `answer_format` how to present answers, default is `~p`. */ - YAP_FLAG(ANSWER_FORMAT_FLAG, "answer_format", true, isatom, "~p", - NULL), #if __APPLE__ - /**< - `apple`: read-only boolean, a machine running an Apple Operating System * - */ - YAP_FLAG(APPLE_FLAG, "apple", false, booleanFlag, "true", - NULL), + YAP_FLAG(APPLE_FLAG, "apple", false, booleanFlag, "true", NULL), /**< + `read-only boolean, a machine running an Apple Operating System * + * #endif - YAP_FLAG(ARCH_FLAG, "arch", false, isatom, YAP_ARCH, NULL), - YAP_FLAG(ARGV_FLAG, "argv", false, argv, "@boot", NULL), - /**< `arithmetic_exceptions` - - Read-write flag telling whether arithmetic exceptions generate - Prolog exceptions. If enabled: - - ~~~ - ?- X is 2/0. - ERROR!! - ZERO DIVISOR ERROR- X is Exp - ~~~ - - If disabled: - ~~~ - ?- X is 2/0. - X = (+inf). - ~~~ - - It is `true` by default, but it is disabled by packages like CLP(BN) and - ProbLog. - */ - YAP_FLAG(ARITHMETIC_EXCEPTIONS_FLAG, "arithmetic_exceptions", true, - booleanFlag, "true", NULL), - /**> - If _Value_ is unbound, tell whether a back quoted list of characters - token is converted to a list of atoms, `chars`, to a list of integers, - `codes`, or to a single atom, `atom`. If _Value_ is bound, set to - the corresponding behavior. The default value is `string` - */ - YAP_FLAG(BACK_QUOTES_FLAG, "back_quotes", true, isatom, "true", NULL), - /**< `bounded` is iso - - Read-only flag telling whether integers are bounded. The value depends - on whether YAP uses the GMP library or not. - */ - - YAP_FLAG(BOUNDED_FLAG, "bounded", false, booleanFlag, "false", - NULL), - YAP_FLAG(C_CC_FLAG, "c_cc", false, isatom, C_CC, NULL), - YAP_FLAG(C_CFLAGS_FLAG, "c_cflags", false, isatom, C_CFLAGS, NULL), - YAP_FLAG(C_LDFLAGS_FLAG, "c_ldflags", false, isatom, C_LDFLAGS, NULL), - YAP_FLAG(C_LIBPLSO_FLAG, "c_libplso", false, isatom, C_LIBPLSO, NULL), - YAP_FLAG(C_LIBS_FLAG, "c_libs", false, isatom, C_LIBS, NULL), - /**< `char_conversion is iso` - - Writable flag telling whether a character conversion table is used when - reading terms. The default value for this flag is `off` except in - `sicstus` and `iso` language modes, where it is `on`. - */ - YAP_FLAG(CHAR_CONVERSION_FLAG, "char_conversion", true, booleanFlag, - "false", NULL), - /**< `character_escapes is iso ` - - Writable flag telling whether a character escapes are enables, - `true`, or disabled, `false`. The default value for this flag is - `true`. */ - YAP_FLAG(CHARACTER_ESCAPES_FLAG, "character_escapes", true, booleanFlag, - "true", NULL), - YAP_FLAG(COLON_SETS_CALLING_CONTEXT_FLAG, "colon_sets_calling_context", - true, booleanFlag, "true", NULL), - /**< `compiled_at ` - - Read-only flag that gives the time when the main YAP binary was compiled. It is - obtained staight from the __TIME__ macro, as defined in the C99. - */ - YAP_FLAG(COMPILED_AT_FLAG, "compiled_at", false, isatom, YAP_COMPILED_AT, - NULL), - /**< `debug is iso ` - - If _Value_ is unbound, tell whether debugging is `true` or - `false`. If _Value_ is bound to `true` enable debugging, and if - it is bound to `false` disable debugging. - */ - YAP_FLAG(DEBUG_FLAG, "debug", true, booleanFlag, "false", - NULL), - YAP_FLAG(DEBUG_INFO_FLAG, "debug_info", true, booleanFlag, "true", NULL), - YAP_FLAG(DEBUG_ON_ERROR_FLAG, "debug_on_error", true, booleanFlag, "true", - NULL), - /**< `debugger_print_options ` - - If bound, set the argument to the `write_term/3` options the - debugger uses to write terms. If unbound, show the current options. - */ - YAP_FLAG(DEBUGGER_PRINT_OPTIONS_FLAG, "debugger_print_options", true, - list_option, - "[quoted(true),numbervars(true),portrayed(true),max_depth(10)]", - NULL), - YAP_FLAG(DEBUGGER_SHOW_CONTEXT_FLAG, "debugger_show_context", true, - booleanFlag, "false", NULL), - /**< `dialect ` - - Read-only flag that always returns `yap`. - */ - YAP_FLAG(DIALECT_FLAG, "dialect", false, ro, "yap", - NULL), - /**< `discontiguous_warnings ` - - If `true` (default `true`) YAP checks for definitions of the same predicate that - are separated by clauses for other predicates. This may indicate that different - procedures have the same name. - - The declaration discontiguous/1 disables this warning for user-specified - predicates. - - */ - YAP_FLAG(DISCONTIGUOUS_WARNINGS_FLAG, "discontiguous_warnings", true, - booleanFlag, "true", NULL), - /**< `dollar_as_lower_case ` - - If `off` (default) consider the character `$` a control character, if - `on` consider `$` a lower case character. - */ - YAP_FLAG(DOLLAR_AS_LOWER_CASE_FLAG, "dollar_as_lower_case", true, - booleanFlag, "false", - NULL), - /**< `double_quotes is iso ` - - If _Value_ is unbound, tell whether a double quoted list of characters - token is converted to a list of atoms, `chars`, to a list of integers, - `codes`, or to a single atom, `atom`. If _Value_ is bound, set to - the corresponding behavior. The default value is `codes`. */ - YAP_FLAG(DOUBLE_QUOTES_FLAG, "double_quotes", true, isatom, "codes", - dqs), - YAP_FLAG(EDITOR_FLAG, "editor", true, isatom, "$EDITOR", NULL), - /**< `executable ` - - Read-only flag. It unifies with an atom that gives the - original program path. - */ - YAP_FLAG(EXECUTABLE_FLAG, "executable", false, executable, "@boot", - NULL), - /**< `fast ` - - If `on` allow fast machine code, if `off` (default) disable it. Only - available in experimental implementations. - */ - YAP_FLAG(FAST_FLAG, "fast", true, booleanFlag, "false", NULL), - YAP_FLAG(FILE_NAME_VARIABLES_FLAG, "file_name_variables", true, booleanFlag, - "true", NULL), - /**< + `float_format ` - - C-library `printf()` format specification used by write/1 and - friends to determine how floating point numbers are printed. The - default is `%.15g`. The specified value is passed to `printf()` - without further checking. For example, if you want less digits - printed, `%g` will print all floats using 6 digits instead of the - default 15. - */ - YAP_FLAG(FLOAT_FORMAT_FLAG, "float_format", true, isatom, "%.16f", - NULL), - /**< `gc` - - If `on` allow garbage collection (default), if `off` disable it. - */ - YAP_FLAG(GC_FLAG, "gc", true, booleanFlag, "on", NULL), - /**< `gc_margin ` - - Set or show the minimum free stack before starting garbage - collection. The default depends on total stack size. - - */ - YAP_FLAG(GC_MARGIN_FLAG, "gc_margin", true, nat, "0", - gc_margin), - /**< `gc_trace ` - - If `off` (default) do not show information on garbage collection - and stack shifts, if `on` inform when a garbage collection or stack - shift happened, if verbose give detailed information on garbage - collection and stack shifts. Last, if `very_verbose` give detailed - information on data-structures found during the garbage collection - process, namely, on choice-points. - */ - YAP_FLAG(GC_TRACE_FLAG, "gc_trace", true, isatom, "off", - NULL), - /**< `generate_debug_info ` - - If `true` (default) generate debugging information for - procedures, including source mode. If `false` predicates no - information is generated, although debugging is still possible, and - source mode is disabled. - - */ - YAP_FLAG(GENERATE_DEBUGGING_INFO_FLAG, "generate_debug_info", true, - booleanFlag, "true", NULL), - YAP_FLAG(GMP_VERSION_FLAG, "gmp_version", false, isatom, "4.8.12", NULL), - YAP_FLAG(HALT_AFTER_CONSULT_FLAG, "halt_after_consult", false, booleanFlag, - "false", NULL), - /**< home ` - - the root of the YAP installation, by default `/usr/local` in Unix or - `c:\Yap` in Windows system. Can only be set at configure time - */ - YAP_FLAG(HOME_FLAG, "home", false, isatom, YAP_ROOTDIR, NULL), - /**< host_type ` - - Return `configure` system information, including the machine-id - for which YAP was compiled and Operating System information. - */ - YAP_FLAG(HOST_TYPE_FLAG, "host_type", false, isatom, HOST_ALIAS, - NULL), - /**< `index ` - - If `on` allow indexing (default), if `off` disable it, if - `single` allow on first argument only. - */ - YAP_FLAG(INDEX_FLAG, "index", true, indexer, "multi", NULL), - /**< `Index_sub_term_search_depth ` - - Maximum bound on searching sub-terms for indexing, if `0` (default) no bound. - */ - YAP_FLAG(INDEX_SUB_TERM_SEARCH_DEPTH_FLAG, "index_sub_term_search_depth", - true, nat, "0", NULL), - /**< `informational_messages ` - - If `on` allow printing of informational messages, such as the ones - that are printed when consulting. If `off` disable printing - these messages. It is `on` by default except if YAP is booted with - the `-L` flag. - */ - YAP_FLAG(INFORMATIONAL_MESSAGES_FLAG, "informational_messages", true, - isatom, "normal", NULL), - /**< `integer_rounding_function is iso ` - - Read-only flag telling the rounding function used for integers. Takes the value - `toward_zero` for the current version of YAP. - */ - YAP_FLAG(INTEGER_ROUNDING_FUNCTION_FLAG, "integer_rounding_function", true, - isatom, "toward_zero", - NULL), - YAP_FLAG(ISO_FLAG, "iso", true, booleanFlag, "false", NULL), - /**< `language ` - - Choose whether YAP follows native, closer to C-Prolog, `yap`, iso-prolog, - `iso` or SICStus Prolog, `sicstus`. The current default is - `cprolog`. This flag affects update semantics, leashing mode, - style checking, handling calls to undefined procedures, how directives - are interpreted, when to use dynamic, character escapes, and how files - are consulted. Also check the `dialect` option. - */ - YAP_FLAG(LANGUAGE_FLAG, "language", true, isatom, "yap", - NULL), - /**< if defined, first location where YAP expects to find the YAP Prolog library. Takes precedence over library_directory */ - YAP_FLAG(PROLOG_LIBRARY_DIRECTORY_FLAG, "prolog_library_directory", true, isatom, "", NULL), - - /**< if defined, first location where YAP expects to find the YAP Prolog shared libraries (DLLS). Takes precedence over executable_directory/2. */ - YAP_FLAG(PROLOG_FOREIGN_DIRECTORY_FLAG, "prolog_foreign_directory", true, isatom, "", NULL), - - /**< `max_arity is iso ` - - Read-only flag telling the maximum arity of a functor. Takes the value - `unbounded` for the current version of YAP. - */ - YAP_FLAG(MAX_ARITY_FLAG, "max_arity", false, isatom, "unbounded", - NULL), - YAP_FLAG(MAX_TAGGED_INTEGER_FLAG, "max_tagged_integer", false, at2n, - "INT_MAX", NULL), - YAP_FLAG(MAX_THREADS_FLAG, "max_threads", false, at2n, "MAX_THREADS", NULL), - YAP_FLAG(MAX_WORKERS_FLAG, "max_workers", false, at2n, "MAX_WORKERS", NULL), - YAP_FLAG(MIN_TAGGED_INTEGER_FLAG, "min_tagged_integer", false, at2n, - "INT_MIN", NULL), - YAP_FLAG(N_OF_INTEGER_KEYS_IN_DB_FLAG, "n_of_integer_keys_in_db", false, ro, - "256", NULL), - YAP_FLAG(OCCURS_CHECK_FLAG, "occurs_check", true, booleanFlag, "false", - NULL), - /**< `open_expands_filename ` - - If `true` the open/3 builtin performs filename-expansion - before opening a file (SICStus Prolog like). If `false` it does not - (SWI-Prolog like). - */ - YAP_FLAG(OPEN_EXPANDS_FILENAME_FLAG, "open_expands_filename", true, - booleanFlag, "false", NULL), - /**< `open_shared_object ` - - If true, `open_shared_object/2` and friends are implemented, - providing access to shared libraries (`.so` files) or to dynamic link - libraries (`.DLL` files). - */ - YAP_FLAG(OPEN_SHARED_OBJECT_FLAG, "open_shared_object", true, booleanFlag, - "true", NULL), - /**< `module_independent_operators ` - - If `true` an operator declaration will be valid for every module in the - program. This is for compatibility with old software that - might expect module-independent operators. - */ - // YAP_FLAG(MODULE_INDEPENDENT_OPERATORS_FLAG, - // "module_independent_operators", true, booleanFlag, - // "false", NULL), - - YAP_FLAG(OPTIMISE_FLAG, "optimise", true, booleanFlag, "false", NULL), - YAP_FLAG(OS_ARGV_FLAG, "os_argv", false, os_argv, "@boot", NULL), - YAP_FLAG(PID_FLAG, "pid", false, sys_pid, "@boot", NULL), - YAP_FLAG(PIPE_FLAG, "pipe", true, booleanFlag, "true", NULL), - /**< `profiling ` - - If `off` (default) do not compile call counting information for - procedures. If `on` compile predicates so that they calls and - retries to the predicate may be counted. Profiling data can be read through the - call_count_data/3 built-in. - */ - YAP_FLAG(PROFILING_FLAG, "profiling", true, booleanFlag, "false", - NULL), - /**< `prompt_alternatives_on(atom, - changeable) ` - - SWI-Compatible option, determines prompting for alternatives in the Prolog - toplevel. Default is groundness, YAP prompts for alternatives if and - only if the query contains variables. The alternative, default in SWI-Prolog is - determinism which implies the system prompts for alternatives if the - goal succeeded while leaving choicepoints. */ - YAP_FLAG(PROMPT_ALTERNATIVES_ON_FLAG, "prompt_alternatives_on", true, - isatom, "determinism", NULL), - YAP_FLAG(QUASI_QUOTATIONS_FLAG, "quasi_quotations", true, booleanFlag, - "true", NULL), - /**< `readline(boolean, changeable)` - } - - enable the use of the readline library for console interactions, true by default - if readline was found. */ - YAP_FLAG(READLINE_FLAG, "readline", true, booleanFlag, "false", - Yap_InitReadline), - YAP_FLAG(REPORT_ERROR_FLAG, "report_error", true, booleanFlag, "true", - NULL), - /**<`resource_database` - Name of the resource file (saved-state or Prolog file) used to construct - the YAP - run-time environment. - */ - YAP_FLAG(RESOURCE_DATABASE_FLAG, "resource_database", false, isatom, - YAP_BOOTSTRAP, NULL), - - /**<`saved_program` - if `true` YAP booted from a `yss` file, usually `startup.yss'. If - `false`, YAP booted from a Prolog file, by default `boot.yap`. - */ - YAP_FLAG(SAVED_PROGRAM_FLAG, "saved_program", false, booleanFlag, "false", - NULL), - - /**< `shared_object_extension ` - - Suffix associated with loadable code. - */ - YAP_FLAG(SHARED_OBJECT_EXTENSION_FLAG, "shared_object_extension", false, - isatom, SO_EXT, NULL), - /**< `shared_object_search_path ` - - Name of the environment variable used by the system to search for shared - objects. - - */ - YAP_FLAG(SHARED_OBJECT_SEARCH_PATH_FLAG, "shared_object_search_path", true, - isatom, SO_PATH, NULL), - /**< `single_quoted text is usuallly interpreted as atoms. This flagTerm allows other inerpretations such as strings_contains_strings */ - YAP_FLAG(SINGLE_QUOTES_FLAG, "single_quotes", true, isatom, "atom", - sqf), - - /**< `signals` - - If `true` (default) YAP handles Signals such as `^C` - (`SIGINT`). - - */ - YAP_FLAG(SIGNALS_FLAG, "signals", true, booleanFlag, "true", - NULL), - /**< `source` - - If `true` maintain the source for all clauses. Notice that this is trivially - supported for facts, and always supported for dynamic code. - - */ - YAP_FLAG(SOURCE_FLAG, "source", true, booleanFlag, "true", - NULL), - /**< `strict_iso ` - - If _Value_ is unbound, tell whether strict ISO compatibility mode - is `on` or `off`. If _Value_ is bound to `on` set - language mode to `iso` and enable strict mode. If _Value_ is - bound to `off` disable strict mode, and keep the current language - mode. The default for YAP is `off`. - Under strict ISO Prolog mode all calls to non-ISO built-ins generate an - error. Compilation of clauses that would call non-ISO built-ins will - also generate errors. Pre-processing for grammar rules is also - disabled. Module expansion is still performed. - Arguably, ISO Prolog does not provide all the functionality required - from a modern Prolog system. Moreover, because most Prolog - implementations do not fully implement the standard and because the - standard itself gives the implementor latitude in a few important - questions, such as the unification algorithm and maximum size for - numbers there is no guarantee that programs compliant with this mode - will work the same way in every Prolog and in every platform. We thus - believe this mode is mostly useful when investigating how a program - depends on a Prolog's platform specific features. - - */ - YAP_FLAG(STRICT_ISO_FLAG, "strict_iso", true, booleanFlag, "false", - NULL), - /**< `system_options ` - - This read only flag tells which options were used to compile - YAP. Currently it informs whether the system supports `big_numbers`, - `coroutining`, `depth_limit`, `low_level_tracer`, - `or-parallelism`, `rational_trees`, `readline`, `tabling`, - `threads`, or the `wam_profiler`. - */ - YAP_FLAG(SYSTEM_OPTIONS_FLAG, "system_options", false, options, - SYSTEM_OPTIONS, NULL), - YAP_FLAG(SYSTEM_THREAD_ID_FLAG, "system_thread_id", false, sys_thread_id, - "@boot", NULL), - /**< `tabling_mode` - - Sets or reads the tabling mode for all tabled predicates. Please - (see Tabling) for the list of options. - - */ - YAP_FLAG(TABLING_MODE_FLAG, "tabling_mode", true, isatom, "[]", - NULL), - YAP_FLAG(THREADS_FLAG, "threads", false, ro, "MAX_THREADS", NULL), - YAP_FLAG(TIMEZONE_FLAG, "timezone", false, ro, "18000", NULL), - YAP_FLAG(TOPLEVEL_PRINT_ANON_FLAG, "toplevel_print_anon", true, booleanFlag, - "true", NULL), - /**< `toplevel_hook ` - - If bound, set the argument to a goal to be executed before entering the - top-level. If unbound show the current goal or `true` if none is - presented. Only the first solution is considered and the goal is not - backtracked into. - - */ - YAP_FLAG(TOPLEVEL_PRINT_OPTIONS_FLAG, "toplevel_print_options", true, - list_option, "[quoted(true),numbervars(true),portrayed(true)]", - NULL), - YAP_FLAG(TOPLEVEL_PROMPT_FLAG, "toplevel_prompt", true, isatom, "?- ", - mkprompt), - YAP_FLAG(TTY_CONTROL_FLAG, "tty_control", true, booleanFlag, "true", NULL), - /**< `unix` - - Read-only BooleanFlag flag that unifies with `true` if YAP is - running on an Unix system. Defined if the C-compiler used to compile - this version of YAP either defines `__unix__` or `unix`. - */ - YAP_FLAG(UNIX_FLAG, "unix", false, ro, "true", NULL), - /**< `update_semantics ` - - Define whether YAP should follow `immediate` update - semantics, as in C-Prolog (default), `logical` update semantics, - as in Quintus Prolog, SICStus Prolog, or in the ISO standard. There is - also an intermediate mode, `logical_assert`, where dynamic - procedures follow logical semantics but the internal data base still - follows immediate semantics. - */ - YAP_FLAG(UPDATE_SEMANTICS_FLAG, "update_semantics", true, isatom, "logical", - NULL), - /**< - `user_flags ` - - Define the behaviour of set_prolog_flag/2 if the flag is not known. Values - are `silent`, `warning` and `error`. The first two create the flag - on-the-fly, with `warning` printing a message. The value `error` is - consistent with ISO: it raises an existence error and does not create the - flag. See also `create_prolog_flag/3`. The default is`error`, and developers - are encouraged to use `create_prolog_flag/3` to create flags for their - library. - */ - YAP_FLAG(USER_FLAGS_FLAG, "user_flags", true, isatom, "error", NULL), - /**< `unknown is iso` - - Corresponds to calling the unknown/2 built-in. Possible ISO values - are `error`, `fail`, and `warning`. Yap includes the following extensions: - `fast_fail` does not invoke any handler. - */ - YAP_FLAG(UNKNOWN_FLAG, "unknown", true, isatom, "error", - Yap_unknown), - YAP_FLAG(VARIABLE_NAMES_MAY_END_WITH_QUOTES_FLAG, - "variable_names_may_end_with_quotes", true, booleanFlag, "false", - NULL), - /**< `verbose ` - - If `normal` allow printing of informational and banner messages, - such as the ones that are printed when consulting. If `silent` - disable printing these messages. It is `normal` by default except if - YAP is booted with the `-q` or `-L` flag. - - */ - YAP_FLAG(VERBOSE_FLAG, "verbose", true, isatom, "normal", - NULL), - YAP_FLAG(VERBOSE_AUTOLOAD_FLAG, "verbose_autoload", true, booleanFlag, - "false", NULL), - /**< `verbose_file_search ` - - If `true` allow printing of informational messages when - searching for file names. If `false` disable printing these messages. It - is `false` by default except if YAP is booted with the `-L` - flag. - */ - YAP_FLAG(VERBOSE_FILE_SEARCH_FLAG, "verbose_file_search", true, booleanFlag, - "false", NULL), - /**< `verbose_load ` - - If `true` allow printing of informational messages when - consulting files. If `false` disable printing these messages. It - is `normal` by default except if YAP is booted with the `-L` - flag. - */ - YAP_FLAG(VERBOSE_LOAD_FLAG, "verbose_load", true, isatom, "normal", - NULL), - /**< `version_data ` - - Read-only flag that unifies with a number of the form - `_Major_ * 100000 + _Minor_ *100 + _Patch_`, where - _Major_ is the major version, _Minor_ is the minor version, - and _Patch_ is the patch number. - */ - YAP_FLAG(VERSION_FLAG, "version", false, nat, YAP_NUMERIC_VERSION, - NULL), - /**< - `version ` Read-only flag that returns a compound term with the - current version of YAP. The term will have the name `yap` and arity 4, the first - argument will be the - major version, the second the minor version, the third the patch number, and the - last one is reserved. - - */ - YAP_FLAG(VERSION_DATA_FLAG, "version_data", false, ro, YAP_TVERSION, - NULL), - /**< `version_git ` - ` - this is the unique identifier for the last commit of the current GIT HEAD, it - xan be used to identify versions that differ on small (or large) updates. - */ - YAP_FLAG(VERSION_GIT_FLAG, "version_git", false, isatom, YAP_GIT_HEAD, - NULL), - YAP_FLAG(WRITE_ATTRIBUTES_FLAG, "write_attributes", true, isatom, "ignore", - NULL), + + + YAP_FLAG(ARCH_FLAG, "arch", false, isatom, YAP_ARCH, NULL),/**< + `apple`: read-only atom, it describes the ISA used in this version of YAP. + Available from YAP_AEH. + */ + + YAP_FLAG(ARGV_FLAG, "argv", false, argv, "@boot", NULL), + /**< `arithmetic_exceptions` + + Read-write flag telling whether arithmetic exceptions generate + Prolog exceptions. If enabled: + + ~~~ + ?- X is 2/0. + ERROR!! + ZERO DIVISOR ERROR- X is Exp + ~~~ + + If disabled: + ~~~ + ?- X is 2/0. + X = (+inf). + ~~~ + + It is `true` by default, but it is disabled by packages like CLP(BN) and + ProbLog. + */ + YAP_FLAG(ARITHMETIC_EXCEPTIONS_FLAG, "arithmetic_exceptions", true, + booleanFlag, "true", NULL), + /**> + If _Value_ is unbound, tell whether a back quoted list of characters + token is converted to a list of atoms, `chars`, to a list of integers, + `codes`, or to a single atom, `atom`. If _Value_ is bound, set to + the corresponding behavior. The default value is `string` + */ + YAP_FLAG(BACK_QUOTES_FLAG, "back_quotes", true, isatom, "true", NULL), + /**< `bounded` is iso + + Read-only flag telling whether integers are bounded. The value depends + on whether YAP uses the GMP library or not. + */ + + YAP_FLAG(BOUNDED_FLAG, "bounded", false, booleanFlag, "false", NULL), + YAP_FLAG(C_CC_FLAG, "c_cc", false, isatom, C_CC, NULL), + YAP_FLAG(C_CFLAGS_FLAG, "c_cflags", false, isatom, C_CFLAGS, NULL), + YAP_FLAG(C_LDFLAGS_FLAG, "c_ldflags", false, isatom, C_LDFLAGS, NULL), + YAP_FLAG(C_LIBPLSO_FLAG, "c_libplso", false, isatom, C_LIBPLSO, NULL), + YAP_FLAG(C_LIBS_FLAG, "c_libs", false, isatom, C_LIBS, NULL), + /**< `char_conversion is iso` + + Writable flag telling whether a character conversion table is used when + reading terms. The default value for this flag is `off` except in + `sicstus` and `iso` language modes, where it is `on`. + */ + YAP_FLAG(CHAR_CONVERSION_FLAG, "char_conversion", true, booleanFlag, + "false", NULL), + /**< `character_escapes is iso ` + + Writable flag telling whether a character escapes are enables, + `true`, or disabled, `false`. The default value for this flag is + `true`. */ + YAP_FLAG(CHARACTER_ESCAPES_FLAG, "character_escapes", true, booleanFlag, + "true", NULL), + YAP_FLAG(COLON_SETS_CALLING_CONTEXT_FLAG, "colon_sets_calling_context", + true, booleanFlag, "true", NULL), + /**< `compiled_at ` + + Read-only flag that gives the time when the main YAP binary was compiled. It + is obtained staight from the __TIME__ macro, as defined in the C99. + */ + YAP_FLAG(COMPILED_AT_FLAG, "compiled_at", false, isatom, YAP_COMPILED_AT, + NULL), + /**< `debug is iso ` + + If _Value_ is unbound, tell whether debugging is `true` or + `false`. If _Value_ is bound to `true` enable debugging, and if + it is bound to `false` disable debugging. + */ + YAP_FLAG(DEBUG_FLAG, "debug", true, booleanFlag, "false", NULL), + YAP_FLAG(DEBUG_INFO_FLAG, "debug_info", true, booleanFlag, "true", NULL), + YAP_FLAG(DEBUG_ON_ERROR_FLAG, "debug_on_error", true, booleanFlag, "true", + NULL), + /**< `debugger_print_options ` + + If bound, set the argument to the `write_term/3` options the + debugger uses to write terms. If unbound, show the current options. + */ + YAP_FLAG(DEBUGGER_PRINT_OPTIONS_FLAG, "debugger_print_options", true, + list_option, + "[quoted(true),numbervars(true),portrayed(true),max_depth(10)]", + NULL), + YAP_FLAG(DEBUGGER_SHOW_CONTEXT_FLAG, "debugger_show_context", true, + booleanFlag, "false", NULL), + /**< `dialect ` + + Read-only flag that always returns `yap`. + */ + YAP_FLAG(DIALECT_FLAG, "dialect", false, ro, "yap", NULL), + /**< `discontiguous_warnings ` + + If `true` (default `true`) YAP checks for definitions of the same predicate + that are separated by clauses for other predicates. This may indicate that + different procedures have the same name. + + The declaration discontiguous/1 disables this warning for user-specified + predicates. + + */ + YAP_FLAG(DISCONTIGUOUS_WARNINGS_FLAG, "discontiguous_warnings", true, + booleanFlag, "true", NULL), + /**< `dollar_as_lower_case ` + + If `off` (default) consider the character `$` a control character, if + `on` consider `$` a lower case character. + */ + YAP_FLAG(DOLLAR_AS_LOWER_CASE_FLAG, "dollar_as_lower_case", true, + booleanFlag, "false", NULL), + /**< `double_quotes is iso ` + + If _Value_ is unbound, tell whether a double quoted list of characters + token is converted to a list of atoms, `chars`, to a list of integers, + `codes`, or to a single atom, `atom`. If _Value_ is bound, set to + the corresponding behavior. The default value is `codes`. */ + YAP_FLAG(DOUBLE_QUOTES_FLAG, "double_quotes", true, isatom, "codes", dqs), + YAP_FLAG(EDITOR_FLAG, "editor", true, isatom, "$EDITOR", NULL), + /**< `executable ` + + Read-only flag. It unifies with an atom that gives the + original program path. + */ + YAP_FLAG(EXECUTABLE_FLAG, "executable", false, executable, "@boot", NULL), + /**< `fast ` + + If `on` allow fast machine code, if `off` (default) disable it. Only + available in experimental implementations. + */ + YAP_FLAG(FAST_FLAG, "fast", true, booleanFlag, "false", NULL), + YAP_FLAG(FILE_NAME_VARIABLES_FLAG, "file_name_variables", true, booleanFlag, + "true", NULL), + /**< + `float_format ` + + C-library `printf()` format specification used by write/1 and + friends to determine how floating point numbers are printed. The + default is `%.15g`. The specified value is passed to `printf()` + without further checking. For example, if you want less digits + printed, `%g` will print all floats using 6 digits instead of the + default 15. + */ + YAP_FLAG(FLOAT_FORMAT_FLAG, "float_format", true, isatom, "%.16f", NULL), + /**< `gc` + + If `on` allow garbage collection (default), if `off` disable it. + */ + YAP_FLAG(GC_FLAG, "gc", true, booleanFlag, "on", NULL), + /**< `gc_margin ` + + Set or show the minimum free stack before starting garbage + collection. The default depends on total stack size. + + */ + YAP_FLAG(GC_MARGIN_FLAG, "gc_margin", true, nat, "0", gc_margin), + /**< `gc_trace ` + + If `off` (default) do not show information on garbage collection + and stack shifts, if `on` inform when a garbage collection or stack + shift happened, if verbose give detailed information on garbage + collection and stack shifts. Last, if `very_verbose` give detailed + information on data-structures found during the garbage collection + process, namely, on choice-points. + */ + YAP_FLAG(GC_TRACE_FLAG, "gc_trace", true, isatom, "off", NULL), + /**< `generate_debug_info ` + + If `true` (default) generate debugging information for + procedures, including source mode. If `false` predicates no + information is generated, although debugging is still possible, and + source mode is disabled. + + */ + YAP_FLAG(GENERATE_DEBUGGING_INFO_FLAG, "generate_debug_info", true, + booleanFlag, "true", NULL), + YAP_FLAG(GMP_VERSION_FLAG, "gmp_version", false, isatom, "4.8.12", NULL), + YAP_FLAG(HALT_AFTER_CONSULT_FLAG, "halt_after_consult", false, booleanFlag, + "false", NULL), + /**< home ` + + the root of the YAP installation, by default `/usr/local` in Unix or + `c:\Yap` in Windows system. Can only be set at configure time + */ + YAP_FLAG(HOME_FLAG, "home", false, isatom, YAP_ROOTDIR, NULL), + /**< host_type ` + + Return `configure` system information, including the machine-id + for which YAP was compiled and Operating System information. + */ + YAP_FLAG(HOST_TYPE_FLAG, "host_type", false, isatom, HOST_ALIAS, NULL), + /**< `index ` + + If `on` allow indexing (default), if `off` disable it, if + `single` allow on first argument only. + */ + YAP_FLAG(INDEX_FLAG, "index", true, indexer, "multi", NULL), + /**< `Index_sub_term_search_depth ` + + Maximum bound on searching sub-terms for indexing, if `0` (default) no + bound. + */ + YAP_FLAG(INDEX_SUB_TERM_SEARCH_DEPTH_FLAG, "index_sub_term_search_depth", + true, nat, "0", NULL), + /**< `informational_messages ` + + If `on` allow printing of informational messages, such as the ones + that are printed when consulting. If `off` disable printing + these messages. It is `on` by default except if YAP is booted with + the `-L` flag. + */ + YAP_FLAG(INFORMATIONAL_MESSAGES_FLAG, "informational_messages", true, + isatom, "normal", NULL), + /**< `integer_rounding_function is iso ` + + Read-only flag telling the rounding function used for integers. Takes the + value `toward_zero` for the current version of YAP. + */ + YAP_FLAG(INTEGER_ROUNDING_FUNCTION_FLAG, "integer_rounding_function", true, + isatom, "toward_zero", NULL), + YAP_FLAG(ISO_FLAG, "iso", true, booleanFlag, "false", NULL), + /**< `language ` + + Choose whether YAP follows native, closer to C-Prolog, `yap`, iso-prolog, + `iso` or SICStus Prolog, `sicstus`. The current default is + `cprolog`. This flag affects update semantics, leashing mode, + style checking, handling calls to undefined procedures, how directives + are interpreted, when to use dynamic, character escapes, and how files + are consulted. Also check the `dialect` option. + */ + YAP_FLAG(LANGUAGE_FLAG, "language", true, isatom, "yap", NULL), + /**< if defined, first location where YAP expects to find the YAP Prolog + library. Takes precedence over library_directory */ + YAP_FLAG(PROLOG_LIBRARY_DIRECTORY_FLAG, "prolog_library_directory", true, + isatom, "", NULL), + + /**< if defined, first location where YAP expects to find the YAP Prolog + shared libraries (DLLS). Takes precedence over executable_directory/2. */ + YAP_FLAG(PROLOG_FOREIGN_DIRECTORY_FLAG, "prolog_foreign_directory", true, + isatom, "", NULL), + + /**< `max_arity is iso ` + + Read-only flag telling the maximum arity of a functor. Takes the value + `unbounded` for the current version of YAP. + */ + YAP_FLAG(MAX_ARITY_FLAG, "max_arity", false, isatom, "unbounded", NULL), + YAP_FLAG(MAX_TAGGED_INTEGER_FLAG, "max_tagged_integer", false, at2n, + "INT_MAX", NULL), + YAP_FLAG(MAX_THREADS_FLAG, "max_threads", false, at2n, "MAX_THREADS", NULL), + YAP_FLAG(MAX_WORKERS_FLAG, "max_workers", false, at2n, "MAX_WORKERS", NULL), + YAP_FLAG(MIN_TAGGED_INTEGER_FLAG, "min_tagged_integer", false, at2n, + "INT_MIN", NULL), + YAP_FLAG(N_OF_INTEGER_KEYS_IN_DB_FLAG, "n_of_integer_keys_in_db", false, ro, + "256", NULL), + YAP_FLAG(OCCURS_CHECK_FLAG, "occurs_check", true, booleanFlag, "false", + NULL), + /**< `open_expands_filename ` + + If `true` the open/3 builtin performs filename-expansion + before opening a file (SICStus Prolog like). If `false` it does not + (SWI-Prolog like). + */ + YAP_FLAG(OPEN_EXPANDS_FILENAME_FLAG, "open_expands_filename", true, + booleanFlag, "false", NULL), + /**< `open_shared_object ` + + If true, `open_shared_object/2` and friends are implemented, + providing access to shared libraries (`.so` files) or to dynamic link + libraries (`.DLL` files). + */ + YAP_FLAG(OPEN_SHARED_OBJECT_FLAG, "open_shared_object", true, booleanFlag, + "true", NULL), + /**< `module_independent_operators ` + + If `true` an operator declaration will be valid for every module in the + program. This is for compatibility with old software that + might expect module-independent operators. + */ + // YAP_FLAG(MODULE_INDEPENDENT_OPERATORS_FLAG, + // "module_independent_operators", true, booleanFlag, + // "false", NULL), + + YAP_FLAG(OPTIMISE_FLAG, "optimise", true, booleanFlag, "false", NULL), + YAP_FLAG(OS_ARGV_FLAG, "os_argv", false, os_argv, "@boot", NULL), + YAP_FLAG(PID_FLAG, "pid", false, sys_pid, "@boot", NULL), + YAP_FLAG(PIPE_FLAG, "pipe", true, booleanFlag, "true", NULL), + /**< `profiling ` + + If `off` (default) do not compile call counting information for + procedures. If `on` compile predicates so that they calls and + retries to the predicate may be counted. Profiling data can be read through + the call_count_data/3 built-in. + */ + YAP_FLAG(PROFILING_FLAG, "profiling", true, booleanFlag, "false", NULL), + /**< `prompt_alternatives_on(atom, + changeable) ` + + SWI-Compatible option, determines prompting for alternatives in the Prolog + toplevel. Default is groundness, YAP prompts for alternatives if + and only if the query contains variables. The alternative, default in + SWI-Prolog is determinism which implies the system prompts for + alternatives if the goal succeeded while leaving choicepoints. */ + YAP_FLAG(PROMPT_ALTERNATIVES_ON_FLAG, "prompt_alternatives_on", true, + isatom, "determinism", NULL), + YAP_FLAG(QUASI_QUOTATIONS_FLAG, "quasi_quotations", true, booleanFlag, + "true", NULL), + /**< `readline(boolean, changeable)` + } + + enable the use of the readline library for console interactions, true by + default if readline was found. */ + YAP_FLAG(READLINE_FLAG, "readline", true, booleanFlag, "false", + Yap_InitReadline), + YAP_FLAG(REPORT_ERROR_FLAG, "report_error", true, booleanFlag, "true", + NULL), + /**<`resource_database` + Name of the resource file (saved-state or Prolog file) used to construct + the YAP + run-time environment. + */ + YAP_FLAG(RESOURCE_DATABASE_FLAG, "resource_database", false, isatom, + YAP_BOOTSTRAP, NULL), + + /**<`saved_program` + if `true` YAP booted from a `yss` file, usually `startup.yss'. If + `false`, YAP booted from a Prolog file, by default `boot.yap`. + */ + YAP_FLAG(SAVED_PROGRAM_FLAG, "saved_program", false, booleanFlag, "false", + NULL), + + /**< `shared_object_extension ` + + Suffix associated with loadable code. + */ + YAP_FLAG(SHARED_OBJECT_EXTENSION_FLAG, "shared_object_extension", false, + isatom, SO_EXT, NULL), + /**< `shared_object_search_path ` + + Name of the environment variable used by the system to search for shared + objects. + + */ + YAP_FLAG(SHARED_OBJECT_SEARCH_PATH_FLAG, "shared_object_search_path", true, + isatom, SO_PATH, NULL), + /**< `single_quoted text is usuallly interpreted as atoms. This flagTerm + allows other inerpretations such as strings_contains_strings */ + YAP_FLAG(SINGLE_QUOTES_FLAG, "single_quotes", true, isatom, "atom", sqf), + + /**< `signals` + + If `true` (default) YAP handles Signals such as `^C` + (`SIGINT`). + + */ + YAP_FLAG(SIGNALS_FLAG, "signals", true, booleanFlag, "true", NULL), + /**< `source` + + If `true` maintain the source for all clauses. Notice that this is trivially + supported for facts, and always supported for dynamic code. + + */ + YAP_FLAG(SOURCE_FLAG, "source", true, booleanFlag, "true", NULL), + /**< `strict_iso ` + + If _Value_ is unbound, tell whether strict ISO compatibility mode + is `on` or `off`. If _Value_ is bound to `on` set + language mode to `iso` and enable strict mode. If _Value_ is + bound to `off` disable strict mode, and keep the current language + mode. The default for YAP is `off`. + Under strict ISO Prolog mode all calls to non-ISO built-ins generate an + error. Compilation of clauses that would call non-ISO built-ins will + also generate errors. Pre-processing for grammar rules is also + disabled. Module expansion is still performed. + Arguably, ISO Prolog does not provide all the functionality required + from a modern Prolog system. Moreover, because most Prolog + implementations do not fully implement the standard and because the + standard itself gives the implementor latitude in a few important + questions, such as the unification algorithm and maximum size for + numbers there is no guarantee that programs compliant with this mode + will work the same way in every Prolog and in every platform. We thus + believe this mode is mostly useful when investigating how a program + depends on a Prolog's platform specific features. + + */ + YAP_FLAG(STRICT_ISO_FLAG, "strict_iso", true, booleanFlag, "false", NULL), + /**< `system_options ` + + This read only flag tells which options were used to compile + YAP. Currently it informs whether the system supports `big_numbers`, + `coroutining`, `depth_limit`, `low_level_tracer`, + `or-parallelism`, `rational_trees`, `readline`, `tabling`, + `threads`, or the `wam_profiler`. + */ + YAP_FLAG(SYSTEM_OPTIONS_FLAG, "system_options", false, options, + SYSTEM_OPTIONS, NULL), + YAP_FLAG(SYSTEM_THREAD_ID_FLAG, "system_thread_id", false, sys_thread_id, + "@boot", NULL), + /**< `tabling_mode` + + Sets or reads the tabling mode for all tabled predicates. Please + (see Tabling) for the list of options. + + */ + YAP_FLAG(TABLING_MODE_FLAG, "tabling_mode", true, isatom, "[]", NULL), + YAP_FLAG(THREADS_FLAG, "threads", false, ro, "MAX_THREADS", NULL), + YAP_FLAG(TIMEZONE_FLAG, "timezone", false, ro, "18000", NULL), + YAP_FLAG(TOPLEVEL_PRINT_ANON_FLAG, "toplevel_print_anon", true, booleanFlag, + "true", NULL), + /**< `toplevel_hook ` + + If bound, set the argument to a goal to be executed before entering the + top-level. If unbound show the current goal or `true` if none is + presented. Only the first solution is considered and the goal is not + backtracked into. + + */ + YAP_FLAG(TOPLEVEL_PRINT_OPTIONS_FLAG, "toplevel_print_options", true, + list_option, "[quoted(true),numbervars(true),portrayed(true)]", + NULL), + YAP_FLAG(TOPLEVEL_PROMPT_FLAG, "toplevel_prompt", true, isatom, "?- ", + mkprompt), + YAP_FLAG(TTY_CONTROL_FLAG, "tty_control", true, booleanFlag, "true", NULL), + /**< `unix` + + Read-only BooleanFlag flag that unifies with `true` if YAP is + running on an Unix system. Defined if the C-compiler used to compile + this version of YAP either defines `__unix__` or `unix`. + */ + YAP_FLAG(UNIX_FLAG, "unix", false, ro, "true", NULL), + /**< `update_semantics ` + + Define whether YAP should follow `immediate` update + semantics, as in C-Prolog (default), `logical` update semantics, + as in Quintus Prolog, SICStus Prolog, or in the ISO standard. There is + also an intermediate mode, `logical_assert`, where dynamic + procedures follow logical semantics but the internal data base still + follows immediate semantics. + */ + YAP_FLAG(UPDATE_SEMANTICS_FLAG, "update_semantics", true, isatom, "logical", + NULL), + /**< + `user_flags ` + + Define the behaviour of set_prolog_flag/2 if the flag is not known. Values + are `silent`, `warning` and `error`. The first two create the flag + on-the-fly, with `warning` printing a message. The value `error` is + consistent with ISO: it raises an existence error and does not create the + flag. See also `create_prolog_flag/3`. The default is`error`, and developers + are encouraged to use `create_prolog_flag/3` to create flags for their + library. + */ + YAP_FLAG(USER_FLAGS_FLAG, "user_flags", true, isatom, "error", NULL), + /**< `unknown is iso` + + Corresponds to calling the unknown/2 built-in. Possible ISO values + are `error`, `fail`, and `warning`. Yap includes the following extensions: + `fast_fail` does not invoke any handler. + */ + YAP_FLAG(UNKNOWN_FLAG, "unknown", true, isatom, "error", Yap_unknown), + YAP_FLAG(VARIABLE_NAMES_MAY_END_WITH_QUOTES_FLAG, + "variable_names_may_end_with_quotes", true, booleanFlag, "false", + NULL), + /**< `verbose ` + + If `normal` allow printing of informational and banner messages, + such as the ones that are printed when consulting. If `silent` + disable printing these messages. It is `normal` by default except if + YAP is booted with the `-q` or `-L` flag. + + */ + YAP_FLAG(VERBOSE_FLAG, "verbose", true, isatom, "normal", NULL), + YAP_FLAG(VERBOSE_AUTOLOAD_FLAG, "verbose_autoload", true, booleanFlag, + "false", NULL), + /**< `verbose_file_search ` + + If `true` allow printing of informational messages when + searching for file names. If `false` disable printing these messages. It + is `false` by default except if YAP is booted with the `-L` + flag. + */ + YAP_FLAG(VERBOSE_FILE_SEARCH_FLAG, "verbose_file_search", true, booleanFlag, + "false", NULL), + /**< `verbose_load ` + + If `true` allow printing of informational messages when + consulting files. If `false` disable printing these messages. It + is `normal` by default except if YAP is booted with the `-L` + flag. + */ + YAP_FLAG(VERBOSE_LOAD_FLAG, "verbose_load", true, isatom, "normal", NULL), + /**< `version_data ` + + Read-only flag that unifies with a number of the form + `_Major_ * 100000 + _Minor_ *100 + _Patch_`, where + _Major_ is the major version, _Minor_ is the minor version, + and _Patch_ is the patch number. + */ + YAP_FLAG(VERSION_FLAG, "version", false, nat, YAP_NUMERIC_VERSION, NULL), + /**< + `version ` Read-only flag that returns a compound term with the + current version of YAP. The term will have the name `yap` and arity 4, the + first argument will be the major version, the second the minor version, the + third the patch number, and the last one is reserved. + + */ + YAP_FLAG(VERSION_DATA_FLAG, "version_data", false, ro, YAP_TVERSION, NULL), + /**< `version_git ` + ` + this is the unique identifier for the last commit of the current GIT HEAD, + it xan be used to identify versions that differ on small (or large) updates. + */ + YAP_FLAG(VERSION_GIT_FLAG, "version_git", false, isatom, YAP_GIT_HEAD, + NULL), + YAP_FLAG(WRITE_ATTRIBUTES_FLAG, "write_attributes", true, isatom, "ignore", + NULL), #if __WINDOWS__ - /**< `windows` + /**< `windows` - Read-only booleanFlag flag that unifies with `true` if YAP is - running on an Windows machine. - */ - YAP_FLAG(WINDOWS_FLAG, "windows", false, ro, "true", NULL), + Read-only booleanFlag flag that unifies with `true` if YAP is + running on an Windows machine. + */ + YAP_FLAG(WINDOWS_FLAG, "windows", false, ro, "true", NULL), #endif - /**< `write_strings ` + /**< `write_strings ` - Writable flag telling whether the system should write lists of - integers that are writable character codes using the list notation. It - is `on` if enables or `off` if disabled. The default value for - this flag is `off`. - */ - YAP_FLAG(WRITE_STRINGS_FLAG, "write_strings", true, booleanFlag, "false", - NULL), + Writable flag telling whether the system should write lists of + integers that are writable character codes using the list notation. It + is `on` if enables or `off` if disabled. The default value for + this flag is `off`. + */ + YAP_FLAG(WRITE_STRINGS_FLAG, "write_strings", true, booleanFlag, "false", + NULL), - END_GLOBAL_FLAGS + END_GLOBAL_FLAGS -//! @} + //! @} diff --git a/cmake/FindR.cmake b/cmake/FindR.cmake index 1cc3d749e..b64cf144a 100644 --- a/cmake/FindR.cmake +++ b/cmake/FindR.cmake @@ -66,10 +66,12 @@ if(R_COMMAND) find_library(R_LIBRARY_READLINE readline DOC "(Optional) system readline library. Only required if the R libraries were built with readline support.") - - # Note: R_LIBRARY_BASE is added to R_LIBRARIES twice; this may be due to circular linking dependencies; needs further investigation - set(R_LIBRARIES ${R_LIBRARY_BASE} ${R_LIBRARY_BLAS} ${R_LIBRARY_LAPACK} ${R_LIBRARY_BASE}) - if(R_LIBRARY_READLINE) - set(R_LIBRARIES ${R_LIBRARIES} ${R_LIBRARY_READLINE}) - endif() +else() + message(SEND_ERROR "FindR.cmake requires the following variables to be set: R_COMMAND") +endif() + +# Note: R_LIBRARY_BASE is added to R_LIBRARIES twice; this may be due to circular linking dependencies; needs further investigation +set(R_LIBRARIES ${R_LIBRARY_BASE} ${R_LIBRARY_BLAS} ${R_LIBRARY_LAPACK} ${R_LIBRARY_BASE}) +if(R_LIBRARY_READLINE) + set(R_LIBRARIES ${R_LIBRARIES} ${R_LIBRARY_READLINE}) endif() diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 14e688253..ffb771ad0 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -892,14 +892,14 @@ EXCLUDE = # The default value is: NO. EXCLUDE_SYMLINKS = NO - + # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* - + EXCLUDE_PATTERNS = @DOCS_EXCLUDE@ # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names @@ -2109,20 +2109,20 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = # - # YAP_FLAG(ITEM,NAME,WRITABLE,DEF,INIT,HELPER)=ITEM \ - # START_LOCAL_FLAGS="enum THREAD_LOCAL_FLAGS {" \ - # END_LOCAL_FLAGS=" };"\ - # START_GLOBAL_FLAGS="enum GLOBAL_FLAGS {" \ - # END_GLOBAL_FLAGS="};" \ - # LOCAL(A, B)="A B" \ - # LOCAL_INIT(A, B, C)="A B;B = C" \ - # LOCAL_ARRAY(A, B, C)="A B[C]" \ - # LOCAL_ARRAY_ARRAY(A, B, C,D)="A B[C][D]"\ - # LOCAL_INIT(A, B, C, D)="A B[C][D]"\ - # LOCAL_INITF(A, B, C)=" A B; C"\ - # LOCAL_INIT_RESTORE(A,B,C,D)="A B; C; D;"\ - # PREG=Yap_REGS.P_ +PREDEFINED = \ + YAP_FLAG(ITEM,NAME,WRITABLE,DEF,INIT,HELPER):=NAME \ + START_LOCAL_FLAGS:="enum THREAD_LOCAL_FLAGS {" \ + END_LOCAL_FLAGS:=" };"\ + START_GLOBAL_FLAGS:="enum GLOBAL_FLAGS {" \ + END_GLOBAL_FLAGS:="};" \ + LOCAL(A, B):="A B" \ + LOCAL_INIT(A, B, C):="A B;B := C" \ + LOCAL_ARRAY(A, B, C):="A B[C]" \ + LOCAL_ARRAY_ARRAY(A, B, C,D):="A B[C][D]"\ + LOCAL_INIT(A, B, C, D):="A B[C][D]"\ + LOCAL_INITF(A, B, C):=" A B; C"\ + LOCAL_INIT_RESTORE(A,B,C,D):="A B; C; D;"\ + PREG:=Yap_REGS.P_ # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2131,7 +2131,7 @@ PREDEFINED = # # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = +EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have diff --git a/packages/real/CMakeLists.txt b/packages/real/CMakeLists.txt index 7f5d24bd5..0151bee32 100644 --- a/packages/real/CMakeLists.txt +++ b/packages/real/CMakeLists.txt @@ -19,231 +19,24 @@ # # Variable search order: # 1. Attempt to locate and set R_COMMAND -# - If unsuccessful, generate error and prompt user to manually set R_COMMAND +# If unsuccessful, generate error and prompt user to manually set R_COMMAND # 2. Use R_COMMAND to set R_HOME # 3. Locate other libraries in the priority: # 1. Within a user-built instance of R at R_HOME # 2. Within an installed instance of R # 3. Within external system libraries # + +if (R_LIBRARIES AND R_INCLUDE_DIR) set_package_properties(R PROPERTIES DESCRIPTION "The R Project for Statistical Computing." - URL "https://www.r-project.org/") - -find_program ( - R_COMMAND - NAMES R r -) - -if (R_COMMAND) - # find the R binary - - MESSAGE(STATUS "Looking for R executable") - IF(NOT R_EXECUTABLE) - FIND_PROGRAM(R_EXECUTABLE R) - IF(R_EXECUTABLE-NOTFOUND) - MESSAGE(FATAL_ERROR "Could NOT find R (TODO: name option)") - ELSE(R_EXECUTABLE-NOTFOUND) - MESSAGE(STATUS "Using R at ${R_EXECUTABLE}") - ENDIF(R_EXECUTABLE-NOTFOUND) - - ENDIF(NOT R_EXECUTABLE) - - - # find R_HOME - - MESSAGE(STATUS "Looking for R_HOME") - IF(NOT R_HOME) - EXECUTE_PROCESS( - COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home())" - OUTPUT_VARIABLE R_HOME) - ENDIF(NOT R_HOME) - IF(NOT R_HOME) - MESSAGE(FATAL_ERROR "Could NOT determine R_HOME (probably you misspecified the location of R)") - ELSE(NOT R_HOME) - MESSAGE(STATUS "R_HOME is ${R_HOME}") - ENDIF(NOT R_HOME) - - # find R include dir - - MESSAGE(STATUS "Looking for R include files") - IF(NOT R_INCLUDEDIR) - IF(WIN32 OR APPLE) # This version of the test will not work with R < 2.9.0, but the other version (in the else part) will not work on windows or apple (but we do not really need to support ancient versions of R, there). - EXECUTE_PROCESS( - COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('include'))" - OUTPUT_VARIABLE R_INCLUDEDIR) - ELSE(WIN32 OR APPLE) - EXECUTE_PROCESS( - COMMAND ${R_EXECUTABLE} CMD sh -c "echo -n $R_INCLUDE_DIR" - OUTPUT_VARIABLE R_INCLUDEDIR) - ENDIF(WIN32 OR APPLE) - ELSE(NOT R_INCLUDEDIR) - MESSAGE(STATUS "Location specified by user") - ENDIF(NOT R_INCLUDEDIR) - - IF(NOT R_INCLUDEDIR) - SET(R_INCLUDEDIR ${R_HOME}/include) - MESSAGE(STATUS "Not findable via R. Guessing") - ENDIF(NOT R_INCLUDEDIR) - MESSAGE(STATUS "Include files should be at ${R_INCLUDEDIR}. Checking for R.h") - - IF(NOT R_H) - FIND_FILE(R_H - R.h - PATHS ${R_INCLUDEDIR} - NO_DEFAULT_PATH) - ENDIF(NOT R_H) - - IF(NOT R_H) - MESSAGE(FATAL_ERROR "Not found") - ELSE(NOT R_H) - MESSAGE(STATUS "Found at ${R_H}") - GET_FILENAME_COMPONENT(R_INCLUDEDIR ${R_H} - PATH) - ENDIF(NOT R_H) - - # check for existence of libR.so - - IF(NOT LIBR_SO) - MESSAGE(STATUS "Checking for existence of R shared library") - FIND_LIBRARY(LIBR_SO - R - PATHS ${R_HOME}/lib ${R_SHAREDLIBDIR} ${R_HOME}/bin - NO_DEFAULT_PATH) - endif(NOT LIBR_SO) - - - IF(NOT LIBR_SO) - MESSAGE(FATAL_ERROR "Not found. Make sure the location of R was detected correctly, above, and R was compiled with the --enable-shlib option") - ELSE(NOT LIBR_SO) - MESSAGE(STATUS "Exists at ${LIBR_SO}") - GET_FILENAME_COMPONENT(R_SHAREDLIBDIR ${LIBR_SO} - PATH) - SET(R_USED_LIBS R) - ENDIF(NOT LIBR_SO) - - - # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some - # R packages will fail due to unresolved symbols, or we can't link against -lR. - # However, we can't do this unconditionally, - # as this is not available in some configurations of R - - MESSAGE(STATUS "Checking whether we should link against Rlapack library") - FIND_LIBRARY(LIBR_LAPACK - Rlapack - PATHS ${R_SHAREDLIBDIR} - NO_DEFAULT_PATH) - IF(NOT LIBR_LAPACK) - MESSAGE(STATUS "No, it does not exist in ${R_SHAREDLIBDIR}") - ELSE(NOT LIBR_LAPACK) - MESSAGE(STATUS "Yes, ${LIBR_LAPACK} exists") - SET(R_USED_LIBS ${R_USED_LIBS} Rlapack) - IF(WIN32 OR APPLE) - ELSE(WIN32 OR APPLE) - # needed when linking to Rlapack on linux for some unknown reason. - # apparently not needed on windows (let's see, when it comes back to bite us, though) - # and compiling on windows is hard enough even without requiring libgfortran, too. - SET(R_USED_LIBS ${R_USED_LIBS} gfortran) - ENDIF(WIN32 OR APPLE) - ENDIF(NOT LIBR_LAPACK) - - # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some - # R packages will fail due to unresolved symbols, or we can't link against -lR. - # However, we can't do this unconditionally, - # as this is not available in some configurations of R - - MESSAGE(STATUS "Checking whether we should link against Rblas library") - FIND_LIBRARY(LIBR_BLAS - Rblas - PATHS ${R_SHAREDLIBDIR} - NO_DEFAULT_PATH) - IF(NOT LIBR_BLAS) - MESSAGE(STATUS "No, it does not exist in ${R_SHAREDLIBDIR}") - ELSE(NOT LIBR_BLAS) - MESSAGE(STATUS "Yes, ${LIBR_BLAS} exists") - SET(R_USED_LIBS ${R_USED_LIBS} Rblas) - ENDIF(NOT LIBR_BLAS) - - # find R package library location - IF(WIN32) - SET(PATH_SEP ";") - ELSE(WIN32) - SET(PATH_SEP ":") - ENDIF(WIN32) - - MESSAGE(STATUS "Checking for R package library location to use") - IF(NOT R_LIBDIR) - EXECUTE_PROCESS( - COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(paste(unique (c(.Library.site, .Library)), collapse='${PATH_SEP}'))" - OUTPUT_VARIABLE R_LIBDIR) - ELSE(NOT R_LIBDIR) - MESSAGE(STATUS "Location specified by user") - ENDIF(NOT R_LIBDIR) - - # strip whitespace - STRING(REGEX REPLACE "[ \n]+" - "" R_LIBDIR - "${R_LIBDIR}") - - # strip leading colon(s) - STRING(REGEX REPLACE "^${PATH_SEP}+" - "" R_LIBDIR - "${R_LIBDIR}") - - # strip trailing colon(s) - STRING(REGEX REPLACE "${PATH_SEP}+$" - "" R_LIBDIR - "${R_LIBDIR}") - - # find first path - STRING(REGEX REPLACE "${PATH_SEP}" - " " R_LIBDIR - "${R_LIBDIR}") - - IF(NOT R_LIBDIR) - MESSAGE(STATUS "Not reliably determined or specified. Guessing.") - SET(R_LIBDIR ${R_HOME}/library) - ENDIF(NOT R_LIBDIR) - - SET(R_LIBDIRS ${R_LIBDIR}) - SEPARATE_ARGUMENTS(R_LIBDIRS) - - SET(R_LIBDIR) - FOREACH(CURRENTDIR ${R_LIBDIRS}) - IF(NOT USE_R_LIBDIR) - IF(EXISTS ${CURRENTDIR}) - SET(R_LIBDIR ${CURRENTDIR}) - SET(USE_R_LIBDIR 1) - ELSE(EXISTS ${CURRENTDIR}) - MESSAGE(STATUS "${CURRENTDIR} does not exist. Skipping") - ENDIF(EXISTS ${CURRENTDIR}) - ENDIF(NOT USE_R_LIBDIR) - ENDFOREACH(CURRENTDIR ${R_LIBDIRS}) - - IF(NOT EXISTS ${R_LIBDIR}) - MESSAGE(FATAL_ERROR "No existing library location found") - ELSE(NOT EXISTS ${R_LIBDIR}) - MESSAGE(STATUS "Will use ${R_LIBDIR}") - ENDIF(NOT EXISTS ${R_LIBDIR}) -endif() -#macro_optional_find_package (R ON) - -if (R_INCLUDEDIR AND R_LIBDIR) - add_feature_info(R yes "Real") - - set (REAL_SOURCES - real.c -) - -set (REAL_PL - real.pl -) - -add_to_group( REAL_PL pl_library) - + + URL "https://www.r-project.org/") +add_lib(real ${REAL_SOURCES}) + target_link_libraries (real ${R_LIBRARIES} libYap) include_directories ( - ${CMAKE_CURRENT_BINARY_DIR} - ${R_INCLUDEDIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${R_INCLUDE_DIR} ) list (APPEND CMAKE_REQUIRED_INCLUDES @@ -251,12 +44,8 @@ include_directories ( ${R_INCLUDE_DIR} ) - add_lib(real ${REAL_SOURCES}) - - target_link_libraries (real ${LIBR_SO} libYap) - check_include_files( "stdio.h;R.h" HAVE_R_H ) - check_include_files( "R.h;Rembedded.h" HAVE_R_EMBEDDED_H ) + check_include_files( "R.h,;Rembedded.h" HAVE_R_EMBEDDED_H ) check_include_files( "Rembedded.h;Rinterface.h" HAVE_R_INTERFACE_H ) configure_file ("rconfig.h.cmake" "rconfig.h" ) diff --git a/pl/control.yap b/pl/control.yap index f4935ddf0..650e81969 100644 --- a/pl/control.yap +++ b/pl/control.yap @@ -82,11 +82,12 @@ @addtogroup YAPControl - -%% @{ +@ingroup builtins */ +%% @{ + /** @pred forall(: _Cond_,: _Action_) @@ -618,13 +619,13 @@ break :- '$break'( false ). -/** +/** * @pred at_halt( G ) * * Hook predicate: _G_ must be called on exit. - * - * @param _G_: the hook - * + * + * @param _G_: the hook + * * @return succeeds with side-effect. */at_halt(G) :- recorda('$halt', G, _), @@ -657,16 +658,16 @@ halt(X) :- set_value('$live','$false'), '$halt'(X). -/** +/** * @pred prolog_current_frame(-Env) * * reports a reference to the last execution environment _Env_. * YAP creates an enviroment when a clause contains several sub-goals. * Facts and simple recursion do not need an environment, - * - * @param Env - * - * @return + * + * @param Env + * + * @return */prolog_current_frame(Env) :- Env is '$env'.