209 lines
5.5 KiB
Plaintext
209 lines
5.5 KiB
Plaintext
|
/*************************************************************************
|
|||
|
* *
|
|||
|
* YAP Prolog *
|
|||
|
* *
|
|||
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
|||
|
* *
|
|||
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2014 *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* File: boot.yap *
|
|||
|
* Last rev: 8/2/88 *
|
|||
|
* mods: *
|
|||
|
* commen ts: boot file for Prolog *
|
|||
|
* *
|
|||
|
*************************************************************************/
|
|||
|
|
|||
|
/**
|
|||
|
@file boot2.yap
|
|||
|
@brief YAP bootstrap, now in full Prolog.
|
|||
|
|
|||
|
|
|||
|
@addtogroup TopLevel Top-Level and Boot Predicates
|
|||
|
|
|||
|
@ingroup builtins
|
|||
|
@{
|
|||
|
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
:- meta_predicate(log_event(+,:)).
|
|||
|
|
|||
|
:- dynamic prolog:'$user_defined_flag'/4.
|
|||
|
|
|||
|
:- multifile prolog:debug_action_hook/1.
|
|||
|
|
|||
|
:- multifile prolog:'$system_predicate'/2.
|
|||
|
|
|||
|
:- '$opdec'(1150,fx,(mode),prolog).
|
|||
|
|
|||
|
:- dynamic 'extensions_to_present_answer'/1.
|
|||
|
:- ['arrays.yap'].
|
|||
|
|
|||
|
:- multifile user:portray_message/2.
|
|||
|
|
|||
|
:- dynamic user:portray_message/2.
|
|||
|
|
|||
|
/** @pred prolog:goal_expansion( :G,+ M,- NG)
|
|||
|
@pred user:goalexpansion(+ G,+ M,- NG)
|
|||
|
|
|||
|
The goal_expansion/3 hook is an user-defined
|
|||
|
procedure that is called after term expansion when compiling or
|
|||
|
asserting goals for each sub-goal in a clause. The first argument is
|
|||
|
bound to the goal and the second to the module under which the goal
|
|||
|
_G_ will execute. If goal_expansion/3 succeeds the new
|
|||
|
sub-goal _NG_ will replace _G_ and will be processed in the same
|
|||
|
way. If goal_expansion/3 fails the system will use the default
|
|||
|
expandion mechanism.
|
|||
|
|
|||
|
This hook is called:
|
|||
|
- at compilation time;
|
|||
|
- when running a query in the top-level
|
|||
|
|
|||
|
Older versions of YAP would call this procedure at every meta-call.
|
|||
|
|
|||
|
|
|||
|
*/
|
|||
|
:- multifile user:goal_expansion/3.
|
|||
|
|
|||
|
:- dynamic user:goal_expansion/3.
|
|||
|
|
|||
|
:- multifile user:goal_expansion/2.
|
|||
|
|
|||
|
:- dynamic user:goal_expansion/2.
|
|||
|
|
|||
|
:- multifile system:goal_expansion/2.
|
|||
|
|
|||
|
:- dynamic system:goal_expansion/2.
|
|||
|
|
|||
|
:- multifile goal_expansion/2.
|
|||
|
|
|||
|
:- dynamic goal_expansion/2.
|
|||
|
|
|||
|
:- use_module('messages.yap').
|
|||
|
|
|||
|
:- ['undefined.yap'].
|
|||
|
|
|||
|
:- use_module('hacks.yap').
|
|||
|
|
|||
|
:- use_module('pathconf.yap').
|
|||
|
|
|||
|
|
|||
|
|
|||
|
:- use_module('attributes.yap').
|
|||
|
:- use_module('corout.yap').
|
|||
|
:- use_module('dialect.yap').
|
|||
|
:- use_module('dbload.yap').
|
|||
|
:- use_module('ypp.yap').
|
|||
|
:- use_module('../os/chartypes.yap').
|
|||
|
:- use_module('../os/edio.yap').
|
|||
|
|
|||
|
|
|||
|
yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
|
|||
|
|
|||
|
:- '$change_type_of_char'(36,7). % Make $ a symbol character
|
|||
|
|
|||
|
:- set_prolog_flag(generate_debug_info,true).
|
|||
|
|
|||
|
%
|
|||
|
% cleanup ensure loaded and recover some data-base space.
|
|||
|
%
|
|||
|
%:- ( recorded('$lf_loaded',_,R), erase(R), fail ; true ).
|
|||
|
%:- ( recorded('$module',_,R), erase(R), fail ; true ).
|
|||
|
|
|||
|
:- set_value('$user_module',user), '$protect'.
|
|||
|
|
|||
|
:- style_check([+discontiguous,+multiple,+single_var]).
|
|||
|
|
|||
|
%
|
|||
|
% moved this to init_gc in sgc.c to separate the alpha
|
|||
|
%
|
|||
|
% :- yap_flag(gc,on).
|
|||
|
%
|
|||
|
% :- yap_flag(gc_trace,verbose`
|
|||
|
|
|||
|
:- multifile
|
|||
|
prolog:comment_hook/3.
|
|||
|
|
|||
|
:- source.
|
|||
|
|
|||
|
:- module(user).
|
|||
|
|
|||
|
:- current_prolog_flag(android,true)->use_module(user:'android.yap') ; true.
|
|||
|
|
|||
|
|
|||
|
/** @pred term_expansion( _T_,- _X_)
|
|||
|
user:term_expansion( _T_,- _X_)
|
|||
|
|
|||
|
|
|||
|
This user-defined predicate is called by `expand_term/3` to
|
|||
|
preprocess all terms read when consulting a file. If it succeeds:
|
|||
|
|
|||
|
+
|
|||
|
If _X_ is of the form `:- G` or `?- G`, it is processed as
|
|||
|
a directive.
|
|||
|
+
|
|||
|
If _X_ is of the form `$source_location`( _File_, _Line_): _Clause_` it is processed as if from `File` and line `Line`.
|
|||
|
|
|||
|
+
|
|||
|
If _X_ is a list, all terms of the list are asserted or processed
|
|||
|
as directives.
|
|||
|
+ The term _X_ is asserted instead of _T_.
|
|||
|
|
|||
|
*/
|
|||
|
:- multifile term_expansion/2.
|
|||
|
|
|||
|
:- dynamic term_expansion/2.
|
|||
|
|
|||
|
:- multifile system:term_expansion/2.
|
|||
|
|
|||
|
:- dynamic system:term_expansion/2.
|
|||
|
|
|||
|
:- multifile system:swi_predicate_table/4.
|
|||
|
|
|||
|
/** @pred user:message_hook(+ _Term_, + _Kind_, + _Lines_)
|
|||
|
|
|||
|
|
|||
|
Hook predicate that may be define in the module `user` to intercept
|
|||
|
messages from print_message/2. _Term_ and _Kind_ are the
|
|||
|
same as passed to print_message/2. _Lines_ is a list of
|
|||
|
format statements as described with print_message_lines/3.
|
|||
|
|
|||
|
This predicate should be defined dynamic and multifile to allow other
|
|||
|
modules defining clauses for it too.
|
|||
|
|
|||
|
|
|||
|
*/
|
|||
|
:- multifile user:message_hook/3.
|
|||
|
|
|||
|
:- dynamic user:message_hook/3.
|
|||
|
|
|||
|
/** @pred exception(+ _Exception_, + _Context_, - _Action_)
|
|||
|
|
|||
|
|
|||
|
Dynamic predicate, normally not defined. Called by the Prolog system on run-time exceptions that can be repaired `just-in-time`. The values for _Exception_ are described below. See also catch/3 and throw/1.
|
|||
|
If this hook preodicate succeeds it must instantiate the _Action_ argument to the atom `fail` to make the operation fail silently, `retry` to tell Prolog to retry the operation or `error` to make the system generate an exception. The action `retry` only makes sense if this hook modified the environment such that the operation can now succeed without error.
|
|||
|
|
|||
|
+ `undefined_predicate`
|
|||
|
_Context_ is instantiated to a predicate-indicator ( _Module:Name/Arity_). If the predicate fails Prolog will generate an existence_error exception. The hook is intended to implement alternatives to the SWI built-in autoloader, such as autoloading code from a database. Do not use this hook to suppress existence errors on predicates. See also `unknown`.
|
|||
|
+ `undefined_global_variable`
|
|||
|
_Context_ is instantiated to the name of the missing global variable. The hook must call nb_setval/2 or b_setval/2 before returning with the action retry.
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
:- module(user).
|
|||
|
|
|||
|
|
|||
|
:- multifile user:exception/3.
|
|||
|
|
|||
|
:- dynamic user:exception/3.
|
|||
|
|
|||
|
|
|||
|
:- set_prolog_flag(unknown,error).
|
|||
|
|
|||
|
%% @}
|
|||
|
|