This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/pl/init.yap

388 lines
8.7 KiB
Plaintext
Raw Normal View History

/*************************************************************************
* *
* YAP Prolog *
* *
2015-08-18 21:08:52 +01:00
** Yap Prolog was developed at NCCUP - Universidade do Porto *
* *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
* *
**************************************************************************
* *
* File: init.yap *
* Last rev: *
* mods: *
* comments: initializing the full prolog system *
* *
*************************************************************************/
2017-04-07 23:10:59 +01:00
/**
@file init.yap
@{
@defgroup library The Prolog library
@}
2015-04-13 13:28:17 +01:00
2014-12-24 15:32:29 +00:00
@addtogroup YAPControl
2017-05-02 04:07:23 +01:00
@ingroup builtins
2015-04-13 13:28:17 +01:00
@{
2014-09-11 20:06:57 +01:00
*/
2014-04-09 12:39:29 +01:00
:- system_module( '$_init', [!/0,
2017-05-02 04:07:23 +01:00
':-'/1,
'?-'/1,
2014-04-09 12:39:29 +01:00
[]/0,
extensions_to_present_answer/1,
fail/0,
false/0,
goal_expansion/2,
goal_expansion/3,
otherwise/0,
term_expansion/2,
version/2,
2017-05-02 04:07:23 +01:00
'$do_log_upd_clause'/6,
2014-04-09 12:39:29 +01:00
'$do_log_upd_clause0'/6,
'$do_log_upd_clause_erase'/6,
'$do_static_clause'/5], [
'$system_module'/1]).
2014-04-09 12:39:29 +01:00
:- use_system_module( '$_boot', ['$cut_by'/1]).
2016-07-31 16:34:54 +01:00
%:- start_low_level_trace.
2014-04-06 17:05:17 +01:00
2016-01-03 02:06:09 +00:00
% This is the YAP init file
% should be consulted first step after booting
% These are pseudo declarations
% so that the user will get a redefining system predicate
2014-09-11 20:06:57 +01:00
2016-01-03 02:06:09 +00:00
:- '$init_pred_flag_vals'('$flag_info'(a,0), prolog).
2014-09-11 20:06:57 +01:00
2016-01-03 02:06:09 +00:00
/** @pred fail is iso
2015-04-13 13:28:17 +01:00
2016-01-03 02:06:09 +00:00
Always fails.
2014-09-11 20:06:57 +01:00
*/
fail :- fail.
2015-04-13 13:28:17 +01:00
/** @pred false is iso
2014-09-11 20:06:57 +01:00
The same as fail.
2015-04-13 13:28:17 +01:00
2014-09-11 20:06:57 +01:00
*/
false :- fail.
otherwise.
!.
(:- G) :- '$execute'(G), !.
(?- G) :- '$execute'(G).
'$$!'(CP) :- '$cut_by'(CP).
[] :- true.
:- set_value('$doindex',true).
2011-08-31 21:59:30 +01:00
% just create a choice-point
% the 6th argument marks the time-stamp.
'$do_log_upd_clause'(_,_,_,_,_,_).
'$do_log_upd_clause'(A,B,C,D,E,_) :-
'$continue_log_update_clause'(A,B,C,D,E).
'$do_log_upd_clause'(_,_,_,_,_,_).
'$do_log_upd_clause_erase'(_,_,_,_,_,_).
'$do_log_upd_clause_erase'(A,B,C,D,E,_) :-
'$continue_log_update_clause_erase'(A,B,C,D,E).
'$do_log_upd_clause_erase'(_,_,_,_,_,_).
'$do_log_upd_clause0'(_,_,_,_,_,_).
'$do_log_upd_clause0'(A,B,C,D,_,_) :-
'$continue_log_update_clause'(A,B,C,D).
'$do_log_upd_clause0'(_,_,_,_,_,_).
'$do_static_clause'(_,_,_,_,_).
'$do_static_clause'(A,B,C,D,E) :-
'$continue_static_clause'(A,B,C,D,E).
'$do_static_clause'(_,_,_,_,_).
2016-04-18 13:25:23 +01:00
:- bootstrap('arith.yap').
2016-03-30 01:26:02 +01:00
:- '$all_current_modules'(M), yap_flag(M:unknown, error) ; true.
2015-06-19 01:11:30 +01:00
2016-02-11 14:17:30 +00:00
:- compile_expressions.
2016-07-31 16:34:54 +01:00
:- bootstrap('bootutils.yap').
:- bootstrap('bootlists.yap').
:- bootstrap('consult.yap').
2014-04-06 17:05:17 +01:00
:- bootstrap('preddecls.yap').
2015-06-19 01:11:30 +01:00
:- bootstrap('preddyns.yap').
:- bootstrap('meta.yap').
:- bootstrap('newmod.yap').
2014-06-22 17:35:05 +01:00
2014-04-06 17:05:17 +01:00
:- bootstrap('atoms.yap').
:- bootstrap('os.yap').
2016-02-11 14:17:30 +00:00
:- bootstrap('grammar.yap').
2016-07-31 16:34:54 +01:00
:- bootstrap('directives.yap').
2013-11-13 22:52:36 +00:00
:- bootstrap('absf.yap').
2014-10-06 00:01:25 +01:00
:- dynamic prolog:'$parent_module'/2.
2017-10-02 08:58:51 +01:00
%:- set_prolog_flag(verbose_file_search, true ).
%:- yap_flag(write_strings,on).
%:- start_low_level_trace.
2015-08-18 21:08:52 +01:00
:- [
'preds.yap',
2014-10-06 00:01:25 +01:00
'modules.yap'
].
2017-10-02 08:58:51 +01:00
:- use_module('error.yap').
2016-04-18 13:25:23 +01:00
:- [
2016-01-31 19:41:10 +00:00
'errors.yap',
'utils.yap',
'control.yap',
'flags.yap'
].
2014-10-06 00:01:25 +01:00
2014-10-11 12:45:54 +01:00
:- [
% lists is often used.
2017-10-11 02:24:15 +01:00
'../os/yio.yap',
'debug.yap',
'checker.yap',
'depth_bound.yap',
'ground.yap',
'listing.yap',
2015-10-05 10:41:14 +01:00
'arithpreds.yap',
% modules must be after preds, otherwise we will have trouble
% with meta-predicate expansion being invoked
% must follow grammar
'eval.yap',
'signals.yap',
'profile.yap',
'callcount.yap',
'load_foreign.yap',
2012-06-11 09:22:53 +01:00
% 'save.yap',
'setof.yap',
2011-06-22 12:29:35 +01:00
'sort.yap',
'statistics.yap',
'strict_iso.yap',
'tabling.yap',
2015-10-22 00:39:10 +01:00
'threads.yap',
'eam.yap',
2009-02-20 11:42:48 +00:00
'yapor.yap',
2017-04-08 11:29:29 +01:00
'qly.yap',
2015-10-05 10:41:14 +01:00
'spy.yap',
2015-07-23 01:31:03 +01:00
'udi.yap'].
2016-07-31 16:34:54 +01:00
2014-06-22 17:35:05 +01:00
:- meta_predicate(log_event(+,:)).
2009-12-04 00:06:11 +00:00
:- dynamic prolog:'$user_defined_flag'/4.
:- multifile prolog:debug_action_hook/1.
:- multifile prolog:'$system_predicate'/2.
:- ['protect.yap'].
2012-06-12 14:50:36 +01:00
version(yap,[6,3]).
2016-02-21 11:31:06 +00:00
:- op(1150,fx,(mode)).
:- dynamic 'extensions_to_present_answer'/1.
:- ['arrays.yap'].
2016-04-18 13:25:23 +01:00
%:- start_low_level_trace.
2015-06-19 01:11:30 +01:00
:- multifile user:portray_message/2.
:- dynamic user:portray_message/2.
/** @pred _CurrentModule_:goal_expansion(+ _G_,+ _M_,- _NG_), user:goal_expansion(+ _G_,+ _M_,- _NG_)
YAP now supports goal_expansion/3. This 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
2016-02-13 03:07:48 +00:00
way. If goal_expansion/3 fails the system will use the defaultyap+flrules.
2015-06-19 01:11:30 +01:00
*/
:- multifile user:goal_expansion/3.
:- dynamic user:goal_expansion/3.
:- multifile user:goal_expansion/2.
2016-03-30 01:26:02 +01:00
2015-06-19 01:11:30 +01:00
:- 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').
2015-09-21 23:05:36 +01:00
2016-07-31 16:34:54 +01:00
:- ['undefined.yap'].
:- use_module('hacks.yap').
2015-09-21 23:05:36 +01:00
:- use_module('attributes.yap').
:- use_module('corout.yap').
:- use_module('dialect.yap').
2011-04-30 01:16:40 +01:00
:- use_module('dbload.yap').
2014-09-08 23:16:00 +01:00
:- use_module('../library/ypp.yap').
2015-10-20 08:03:16 +01:00
:- use_module('../os/chartypes.yap').
2015-11-05 17:14:31 +00:00
:- ensure_loaded('../os/edio.yap').
2012-06-08 12:55:23 +01:00
yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
:- '$change_type_of_char'(36,7). % Make $ a symbol character
2015-06-19 01:11:30 +01:00
:- set_prolog_flag(generate_debug_info,true).
%
% cleanup ensure loaded and recover some data-base space.
%
2013-11-04 01:14:48 +00:00
:- ( recorded('$lf_loaded',_,R), erase(R), fail ; true ).
:- ( recorded('$lf_loaded',_,R), erase(R), fail ; true ).
2013-11-04 01:14:48 +00:00
:- ( recorded('$module',_,R), erase(R), fail ; true ).
:- set_value('$user_module',user), '$protect'.
2016-01-03 02:06:09 +00:00
:- style_check([+discontiguous,+multiple,+single_var]).
%
% moved this to init_gc in gc.c to separate the alpha
%
% :- yap_flag(gc,on).
% :- yap_flag(gc_trace,verbose).
2011-06-14 09:02:44 +01:00
:- multifile
prolog:comment_hook/3.
2014-09-25 09:44:34 +01:00
:- source.
:- module(user).
2014-09-11 20:06:57 +01:00
2015-04-13 13:28:17 +01:00
/** @pred _CurrentModule_:term_expansion( _T_,- _X_), user:term_expansion( _T_,- _X_)
2014-09-11 20:06:57 +01:00
This user-defined predicate is called by `expand_term/3` to
preprocess all terms read when consulting a file. If it succeeds:
2015-04-13 13:28:17 +01:00
+
2014-09-11 20:06:57 +01:00
If _X_ is of the form `:- G` or `?- G`, it is processed as
a directive.
2015-04-13 13:28:17 +01:00
+
2014-09-11 20:06:57 +01:00
If _X_ is of the form `$source_location`( _File_, _Line_): _Clause_` it is processed as if from `File` and line `Line`.
2015-04-13 13:28:17 +01:00
+
2014-09-11 20:06:57 +01:00
If _X_ is a list, all terms of the list are asserted or processed
as directives.
+ The term _X_ is asserted instead of _T_.
2015-04-13 13:28:17 +01:00
2014-09-11 20:06:57 +01:00
*/
:- multifile term_expansion/2.
:- dynamic term_expansion/2.
2011-06-14 09:02:44 +01:00
:- multifile system:term_expansion/2.
:- dynamic system:term_expansion/2.
:- multifile swi:swi_predicate_table/4.
2015-04-13 13:28:17 +01:00
/** @pred user:message_hook(+ _Term_, + _Kind_, + _Lines_)
2014-09-11 20:06:57 +01:00
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.
2015-04-13 13:28:17 +01:00
2014-09-11 20:06:57 +01:00
*/
:- multifile user:message_hook/3.
:- dynamic user:message_hook/3.
2015-04-13 13:28:17 +01:00
/** @pred exception(+ _Exception_, + _Context_, - _Action_)
2014-09-11 20:06:57 +01:00
2015-01-18 01:32:13 +00:00
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.
2014-09-11 20:06:57 +01:00
If this hook predicate 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.
2015-07-06 12:04:42 +01:00
*/
2014-09-25 09:44:34 +01:00
2010-03-01 22:32:40 +00:00
:- multifile user:exception/3.
2010-03-01 23:02:37 +00:00
:- dynamic user:exception/3.
2016-07-31 16:34:54 +01:00
:- reconsult('pathconf.yap').
2015-08-18 21:08:52 +01:00
/*
Add some tests
*/
2015-09-21 23:05:36 +01:00
2016-01-03 02:06:09 +00:00
2015-06-19 01:11:30 +01:00
:- yap_flag(user:unknown,error).
2015-09-21 23:05:36 +01:00
/*
:- if(predicate_property(run_tests, static)).
2015-08-18 21:08:52 +01:00
aa b.
p(X,Y) :- Y is X*X.
prefix(information, '% ', S, user_error) --> [].
:- format('~d~n', [a]).
:- format('~d~n', []).
:- p(X,Y).
a(1).
a.
a(2).
a(2).
lists:member(1,[1]).
clause_to_indicator(T, M:Name/Arity) :- ,
strip_module(T, M, T1),
pred_arity( T1, Name, Arity ).
2015-09-21 23:05:36 +01:00
:- endif.
2014-09-11 20:06:57 +01:00
*/