problog
This commit is contained in:
parent
21ff73dd70
commit
32a5158c6b
@ -3977,6 +3977,7 @@ static void EraseLogUpdCl(LogUpdClause *clau) {
|
|||||||
ap->cs.p_code.LastClause = clau->ClPrev->ClCode;
|
ap->cs.p_code.LastClause = clau->ClPrev->ClCode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clau->ClTimeEnd = ap->TimeStampOfPred;
|
||||||
ap->cs.p_code.NOfClauses--;
|
ap->cs.p_code.NOfClauses--;
|
||||||
}
|
}
|
||||||
#ifndef THREADS
|
#ifndef THREADS
|
||||||
|
@ -95,8 +95,9 @@ INLINE_ONLY int VALID_TIMESTAMP(UInt, struct logic_upd_clause *);
|
|||||||
|
|
||||||
INLINE_ONLY int VALID_TIMESTAMP(UInt timestamp,
|
INLINE_ONLY int VALID_TIMESTAMP(UInt timestamp,
|
||||||
struct logic_upd_clause *cl) {
|
struct logic_upd_clause *cl) {
|
||||||
|
// printf("%lu %lu %lu\n",cl->ClTimeStart, timestamp, cl->ClTimeEnd);
|
||||||
return IN_BETWEEN(cl->ClTimeStart, timestamp, cl->ClTimeEnd);
|
return IN_BETWEEN(cl->ClTimeStart, timestamp, cl->ClTimeEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct dynamic_clause {
|
typedef struct dynamic_clause {
|
||||||
/* A set of flags describing info on the clause */
|
/* A set of flags describing info on the clause */
|
||||||
|
@ -4,8 +4,8 @@ set (PROGRAMS
|
|||||||
problog_lfi.yap
|
problog_lfi.yap
|
||||||
dtproblog.yap
|
dtproblog.yap
|
||||||
aproblog.yap
|
aproblog.yap
|
||||||
problog_lbfgs.yap
|
|
||||||
problog_learning.yap
|
problog_learning.yap
|
||||||
|
problog_lbfgs.yap
|
||||||
problog_learning_lbdd.yap
|
problog_learning_lbdd.yap
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -517,15 +517,12 @@ every 5th iteration only.
|
|||||||
% directory where simplecudd executable is located
|
% directory where simplecudd executable is located
|
||||||
% automatically set during loading -- assumes it is in /usr/local/bin or same place where YAP has
|
% automatically set during loading -- assumes it is in /usr/local/bin or same place where YAP has
|
||||||
% been installed.)
|
% been installed.)
|
||||||
|
|
||||||
:- getcwd(PD0),
|
:- getcwd(PD0),
|
||||||
atom_concat(PD0, '../../bin', PD),
|
atom_concat(PD0, '../../bin', PD),
|
||||||
set_problog_path(PD).
|
set_problog_path(PD).
|
||||||
|
|
||||||
:- PD = '/usr/local/bin',
|
:- PD = '/usr/local/bin',
|
||||||
set_problog_path(PD).
|
set_problog_path(PD).
|
||||||
:- PD = '$HOME/,local/bin',
|
|
||||||
set_problog_path(PD).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -554,7 +551,10 @@ every 5th iteration only.
|
|||||||
%%%%%%%%%%%%
|
%%%%%%%%%%%%
|
||||||
% max number of calls to probabilistic facts per derivation (to ensure termination)
|
% max number of calls to probabilistic facts per derivation (to ensure termination)
|
||||||
%%%%%%%%%%%%
|
%%%%%%%%%%%%
|
||||||
:- initialization( problog_define_flag(maxsteps, problog_flag_validate_posint, 'max. number of prob. steps per derivation', 1000, inference) ).
|
|
||||||
|
:- initialization(
|
||||||
|
problog_define_flag(maxsteps, problog_flag_validate_posint, 'max. number of prob. steps per derivation', 1000, inference)
|
||||||
|
).
|
||||||
|
|
||||||
%%%%%%%%%%%%
|
%%%%%%%%%%%%
|
||||||
% BDD timeout in seconds, used as option in BDD tool
|
% BDD timeout in seconds, used as option in BDD tool
|
||||||
@ -626,7 +626,6 @@ every 5th iteration only.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
problog_dir(PD):- problog_path(PD).
|
problog_dir(PD):- problog_path(PD).
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -2445,7 +2444,7 @@ and the facts used in achieving this explanation.
|
|||||||
explanation probability - returns list of facts used or constant 'unprovable' as third argument
|
explanation probability - returns list of facts used or constant 'unprovable' as third argument
|
||||||
problog_max(+Goal,-Prob,-Facts)
|
problog_max(+Goal,-Prob,-Facts)
|
||||||
|
|
||||||
uses iterative deepening with samw parameters as bounding algorithm
|
uses iterative deepening with same parameters as bounding algorithm
|
||||||
threshold gets adapted whenever better proof is found
|
threshold gets adapted whenever better proof is found
|
||||||
|
|
||||||
uses local dynamic predicates max_probability/1 and max_proof/1
|
uses local dynamic predicates max_probability/1 and max_proof/1
|
||||||
@ -2454,8 +2453,8 @@ uses local dynamic predicates max_probability/1 and max_proof/1
|
|||||||
problog_max(Goal, Prob, Facts) :-
|
problog_max(Goal, Prob, Facts) :-
|
||||||
problog_flag(first_threshold,InitT),
|
problog_flag(first_threshold,InitT),
|
||||||
init_problog_max(InitT),
|
init_problog_max(InitT),
|
||||||
problog_control(off,up), %
|
problog_control(off,up),
|
||||||
problog_max_id(Goal, Prob, FactIDs), %theo todo
|
problog_max_id(Goal, Prob, FactIDs),% theo todo
|
||||||
( FactIDs = [_|_] -> get_fact_list(FactIDs, Facts);
|
( FactIDs = [_|_] -> get_fact_list(FactIDs, Facts);
|
||||||
Facts = FactIDs).
|
Facts = FactIDs).
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@
|
|||||||
%
|
%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
%% @file problog/flags.yap
|
%% @file problog/flags
|
||||||
|
|
||||||
:-module(flags, [problog_define_flag/4,
|
:-module(flags, [problog_define_flag/4,
|
||||||
problog_define_flag/5,
|
problog_define_flag/5,
|
||||||
@ -218,7 +218,7 @@
|
|||||||
:- use_module(gflags).
|
:- use_module(gflags).
|
||||||
:- use_module(os).
|
:- use_module(os).
|
||||||
:- use_module(logger).
|
:- use_module(logger).
|
||||||
:- use_module(library(system), [file_exists/1, delete_file/1,file_property/2]).
|
:- use_module(library(system), [file_exists/1, delete_file/1]).
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup ProbLogMiscellaneous ProbLog Miscellaneous Predicates
|
/** @defgroup ProbLogMiscellaneous ProbLog Miscellaneous Predicates
|
||||||
|
@ -243,7 +243,7 @@
|
|||||||
problog_define_flag(refine_anclst, problog_flag_validate_boolean, 'refine the ancestor list with their childs', false, nested_tries),
|
problog_define_flag(refine_anclst, problog_flag_validate_boolean, 'refine the ancestor list with their childs', false, nested_tries),
|
||||||
problog_define_flag(anclst_represent,problog_flag_validate_in_list([list, integer]), 'represent the ancestor list', list, nested_tries)
|
problog_define_flag(anclst_represent,problog_flag_validate_in_list([list, integer]), 'represent the ancestor list', list, nested_tries)
|
||||||
)).
|
)).
|
||||||
|
:- stop_low_level_trace.
|
||||||
|
|
||||||
trie_replace_entry(_Trie, Entry, E, false):-
|
trie_replace_entry(_Trie, Entry, E, false):-
|
||||||
trie_get_entry(Entry, Proof),
|
trie_get_entry(Entry, Proof),
|
||||||
@ -486,4 +486,3 @@ get_trie(Trie, Label, Ancestors):-
|
|||||||
|
|
||||||
set_trie(Trie, Label, Ancestors):-
|
set_trie(Trie, Label, Ancestors):-
|
||||||
recordz(problog_trie_table, store(Trie, Ancestors, Label), _).
|
recordz(problog_trie_table, store(Trie, Ancestors, Label), _).
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@
|
|||||||
:- initialization(
|
:- initialization(
|
||||||
( predicate_property(trie_disable_hash, imported_from(_M)) ->
|
( predicate_property(trie_disable_hash, imported_from(_M)) ->
|
||||||
trie_disable_hash
|
trie_disable_hash
|
||||||
; true % stop_low_level_trace, print_message(warning,'The predicate trie_disable_hash/0 does not exist. Please update trie library.')
|
; print_message(warning,'The predicate tries:trie_disable_hash/0 does not exist. Please update trie library.')
|
||||||
)
|
)
|
||||||
).
|
).
|
||||||
|
|
||||||
@ -276,7 +276,7 @@
|
|||||||
:- initialization((
|
:- initialization((
|
||||||
problog_define_flag(use_db_trie, problog_flag_validate_boolean, 'use the builtin trie 2 trie transformation', false),
|
problog_define_flag(use_db_trie, problog_flag_validate_boolean, 'use the builtin trie 2 trie transformation', false),
|
||||||
problog_define_flag(db_trie_opt_lvl, problog_flag_validate_integer, 'optimization level for the trie 2 trie transformation', 0),
|
problog_define_flag(db_trie_opt_lvl, problog_flag_validate_integer, 'optimization level for the trie 2 trie transformation', 0),
|
||||||
problog_define_flag(compare_opt_lvl, problog_flag_validate_boolean, 'comparison mode for optimizatione level', false),
|
problog_define_flag(compare_opt_lvl, problog_flag_validate_boolean, 'comparison mode for optimization level', false),
|
||||||
problog_define_flag(db_min_prefix, problog_flag_validate_integer, 'minimum size of prefix for dbtrie to optimize', 2),
|
problog_define_flag(db_min_prefix, problog_flag_validate_integer, 'minimum size of prefix for dbtrie to optimize', 2),
|
||||||
problog_define_flag(use_naive_trie, problog_flag_validate_boolean, 'use the naive algorithm to generate bdd scripts', false),
|
problog_define_flag(use_naive_trie, problog_flag_validate_boolean, 'use the naive algorithm to generate bdd scripts', false),
|
||||||
problog_define_flag(use_old_trie, problog_flag_validate_boolean, 'use the old trie 2 trie transformation no nested', true),
|
problog_define_flag(use_old_trie, problog_flag_validate_boolean, 'use the old trie 2 trie transformation no nested', true),
|
||||||
|
@ -15,8 +15,9 @@
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
:- use_module(library(matrix)).
|
:- use_module(library(matrix)).
|
||||||
:- use_module('../problog_learning').
|
|
||||||
|
|
||||||
|
:- use_module(('../problog_learning')).
|
||||||
|
:- stop_low_level_trace.
|
||||||
%%%%
|
%%%%
|
||||||
% background knowledge
|
% background knowledge
|
||||||
%%%%
|
%%%%
|
||||||
@ -31,8 +32,8 @@ path(X,Y,A,R) :-
|
|||||||
path(Z,Y,[Z|A],R).
|
path(Z,Y,[Z|A],R).
|
||||||
|
|
||||||
% using directed edges in both directions
|
% using directed edges in both directions
|
||||||
edge(X,Y) :- dir_edge(Y,X).
|
edge(X,Y) :- problog:dir_edge(Y,X).
|
||||||
edge(X,Y) :- dir_edge(X,Y).
|
edge(X,Y) :- problog:dir_edge(X,Y).
|
||||||
|
|
||||||
% checking whether node hasn't been visited before
|
% checking whether node hasn't been visited before
|
||||||
absent(_,[]).
|
absent(_,[]).
|
||||||
@ -99,7 +100,7 @@ test_example(33,path(5,4),0.57).
|
|||||||
test_example(34,path(6,4),0.51).
|
test_example(34,path(6,4),0.51).
|
||||||
test_example(35,path(6,5),0.69).
|
test_example(35,path(6,5),0.69).
|
||||||
|
|
||||||
:- set_problog_flag(init_method,(Query,_,BDD,
|
%:- set_problog_flag(init_method,(Query,_,BDD,
|
||||||
problog_exact_lbdd(user:Query,BDD))).
|
% problog_exact(user:Query,_,BDD))).
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,8 +14,7 @@
|
|||||||
% will run 20 iterations of learning with default settings
|
% will run 20 iterations of learning with default settings
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
:- use_module(library(problog)).
|
:- use_module(library(problog_learning)).
|
||||||
:- use_module(library(problog_learning_lbdd)).
|
|
||||||
|
|
||||||
%%%%
|
%%%%
|
||||||
% background knowledge
|
% background knowledge
|
||||||
|
@ -581,8 +581,7 @@ bdd_input_file(Filename) :-
|
|||||||
concat_path_with_filename(Dir,'input.txt',Filename).
|
concat_path_with_filename(Dir,'input.txt',Filename).
|
||||||
|
|
||||||
init_one_query(QueryID,Query,_Type) :-
|
init_one_query(QueryID,Query,_Type) :-
|
||||||
writeln(init_one_query(QueryID,Query,_Type)),
|
% format_learning(3,' ~q example ~q: ~q~n',[Type,QueryID,Query]),
|
||||||
% format_learning(3,' ~q example ~q: ~q~n',[Type,QueryID,Query]),
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
% if BDD file does not exist, call ProbLog
|
% if BDD file does not exist, call ProbLog
|
||||||
@ -593,15 +592,13 @@ writeln(init_one_query(QueryID,Query,_Type)),
|
|||||||
format_learning(3,' Reuse existing BDD ~q~n~n',[QueryID])
|
format_learning(3,' Reuse existing BDD ~q~n~n',[QueryID])
|
||||||
;
|
;
|
||||||
b_setval(problog_required_keep_ground_ids,false),
|
b_setval(problog_required_keep_ground_ids,false),
|
||||||
|
|
||||||
(QueryID mod 100 =:= 0 -> writeln(QueryID) ; true),
|
(QueryID mod 100 =:= 0 -> writeln(QueryID) ; true),
|
||||||
|
problog_flag(init_method,(Query,N,Bdd,graph2bdd(X,Y,N,Bdd))),
|
||||||
problog_flag(init_method,(Query,N,Bdd,G)),
|
|
||||||
Query =.. [_,X,Y]
|
Query =.. [_,X,Y]
|
||||||
->
|
->
|
||||||
Bdd = bdd(Dir, Tree, MapList),
|
Bdd = bdd(Dir, Tree, MapList),
|
||||||
(
|
(
|
||||||
G
|
graph2bdd(X,Y,N,Bdd)
|
||||||
->
|
->
|
||||||
rb_new(H0),
|
rb_new(H0),
|
||||||
maplist_to_hash(MapList, H0, Hash),
|
maplist_to_hash(MapList, H0, Hash),
|
||||||
@ -612,8 +609,7 @@ writeln(init_one_query(QueryID,Query,_Type)),
|
|||||||
),
|
),
|
||||||
write('.'),
|
write('.'),
|
||||||
recordz(QueryID,bdd(Dir, Grad, MapList),_)
|
recordz(QueryID,bdd(Dir, Grad, MapList),_)
|
||||||
).
|
;
|
||||||
/* ;
|
|
||||||
problog_flag(init_method,(Query,NOf,Bdd,problog_kbest_as_bdd(Call,NOf,Bdd))) ->
|
problog_flag(init_method,(Query,NOf,Bdd,problog_kbest_as_bdd(Call,NOf,Bdd))) ->
|
||||||
b_setval(problog_required_keep_ground_ids,false),
|
b_setval(problog_required_keep_ground_ids,false),
|
||||||
rb_new(H0),
|
rb_new(H0),
|
||||||
@ -628,20 +624,20 @@ writeln(init_one_query(QueryID,Query,_Type)),
|
|||||||
tree_to_grad(Tree, Hash, [], Grad),
|
tree_to_grad(Tree, Hash, [], Grad),
|
||||||
recordz(QueryID,bdd(Dir, Grad, MapList),_)
|
recordz(QueryID,bdd(Dir, Grad, MapList),_)
|
||||||
;
|
;
|
||||||
|
problog_flag(init_method,(Query,NOf,Bdd,Call)) ->
|
||||||
problog_flag(init_method,(Query,NOf,Bdd,_Call)) ,
|
|
||||||
Query = gene(X,Y),
|
|
||||||
b_setval(problog_required_keep_ground_ids,false),
|
b_setval(problog_required_keep_ground_ids,false),
|
||||||
rb_new(H0),
|
rb_new(H0),
|
||||||
Bdd = bdd(Dir, Tree, MapList),
|
Bdd = bdd(Dir, Tree, MapList),
|
||||||
user:graph2bdd(X,Y,1,Bdd),
|
% trace,
|
||||||
|
problog:Call,
|
||||||
maplist_to_hash(MapList, H0, Hash),
|
maplist_to_hash(MapList, H0, Hash),
|
||||||
Tree \= [],
|
Tree \= [],
|
||||||
%put_code(0'.),
|
%put_code(0'.),
|
||||||
tree_to_grad(Tree, Hash, [], Grad),
|
tree_to_grad(Tree, Hash, [], Grad),
|
||||||
recordz(QueryID,bdd(Dir, Grad, MapList),_).
|
recordz(QueryID,bdd(Dir, Grad, MapList),_)
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
%========================================================================
|
%========================================================================
|
||||||
|
@ -1487,10 +1487,12 @@ my_5_min(V1,V2,V3,V4,V5,F1,F2,F3,F4,F5,VMin,FMin) :-
|
|||||||
%========================================================================
|
%========================================================================
|
||||||
|
|
||||||
init_flags :-
|
init_flags :-
|
||||||
|
writeln(10),
|
||||||
prolog_file_name('queries',Queries_Folder), % get absolute file name for './queries'
|
prolog_file_name('queries',Queries_Folder), % get absolute file name for './queries'
|
||||||
prolog_file_name('output',Output_Folder), % get absolute file name for './output'
|
prolog_file_name('output',Output_Folder), % get absolute file name for './output'
|
||||||
problog_define_flag(bdd_directory, problog_flag_validate_directory, 'directory for BDD scripts', Queries_Folder,learning_general),
|
problog_define_flag(bdd_directory, problog_flag_validate_directory, 'directory for BDD scripts', Queries_Folder,learning_general),
|
||||||
problog_define_flag(output_directory, problog_flag_validate_directory, 'directory for logfiles etc', Output_Folder,learning_general,flags:learning_output_dir_handler),
|
problog_define_flag(output_directory, problog_flag_validate_directory, 'directory for logfiles etc', Output_Folder,learning_general,flags:learning_output_dir_handler),
|
||||||
|
writeln(10),
|
||||||
problog_define_flag(log_frequency, problog_flag_validate_posint, 'log results every nth iteration', 1, learning_general),
|
problog_define_flag(log_frequency, problog_flag_validate_posint, 'log results every nth iteration', 1, learning_general),
|
||||||
problog_define_flag(rebuild_bdds, problog_flag_validate_nonegint, 'rebuild BDDs every nth iteration', 0, learning_general),
|
problog_define_flag(rebuild_bdds, problog_flag_validate_nonegint, 'rebuild BDDs every nth iteration', 0, learning_general),
|
||||||
problog_define_flag(reuse_initialized_bdds,problog_flag_validate_boolean, 'Reuse BDDs from previous runs',false, learning_general),
|
problog_define_flag(reuse_initialized_bdds,problog_flag_validate_boolean, 'Reuse BDDs from previous runs',false, learning_general),
|
||||||
@ -1529,3 +1531,4 @@ init_logger :-
|
|||||||
|
|
||||||
:- initialization(init_flags).
|
:- initialization(init_flags).
|
||||||
:- initialization(init_logger).
|
:- initialization(init_logger).
|
||||||
|
|
||||||
|
@ -770,6 +770,7 @@ db_files(Fs) :-
|
|||||||
'$lf_opt'(imports, TOpts, Imports),
|
'$lf_opt'(imports, TOpts, Imports),
|
||||||
'$import_to_current_module'(File, ContextModule, Imports, _, TOpts),
|
'$import_to_current_module'(File, ContextModule, Imports, _, TOpts),
|
||||||
'$current_module'(Mod, SourceModule),
|
'$current_module'(Mod, SourceModule),
|
||||||
|
%`writeln(( ContextModule/Mod )),
|
||||||
set_prolog_flag(verbose_load, VerboseLoad),
|
set_prolog_flag(verbose_load, VerboseLoad),
|
||||||
H is heapused-H0, '$cputime'(TF,_), T is TF-T0,
|
H is heapused-H0, '$cputime'(TF,_), T is TF-T0,
|
||||||
print_message(informational, loaded(EndMsg, File, Mod, T, H)),
|
print_message(informational, loaded(EndMsg, File, Mod, T, H)),
|
||||||
|
@ -305,7 +305,7 @@ prolog:when(_,Goal) :-
|
|||||||
%
|
%
|
||||||
'$declare_when'(Cond, G) :-
|
'$declare_when'(Cond, G) :-
|
||||||
generate_code_for_when(Cond, G, Code),
|
generate_code_for_when(Cond, G, Code),
|
||||||
'$$compile'(Code, Module, assertz, Code, _), fail.
|
'$$compile'(Code, assertz, Code, _), fail.
|
||||||
'$declare_when'(_,_).
|
'$declare_when'(_,_).
|
||||||
|
|
||||||
%
|
%
|
||||||
@ -433,7 +433,6 @@ suspend_when_goals([_|_], _).
|
|||||||
%
|
%
|
||||||
prolog:'$block'(Conds) :-
|
prolog:'$block'(Conds) :-
|
||||||
generate_blocking_code(Conds, _, Code),
|
generate_blocking_code(Conds, _, Code),
|
||||||
'$yap_strip_module'(Code, Module, NCode),
|
|
||||||
'$$compile'(Code, assertz, Code, _), fail.
|
'$$compile'(Code, assertz, Code, _), fail.
|
||||||
prolog:'$block'(_).
|
prolog:'$block'(_).
|
||||||
|
|
||||||
|
@ -463,8 +463,9 @@ meta_predicate(P) :-
|
|||||||
% A4: module for body of clause (this is the one used in looking up predicates)
|
% A4: module for body of clause (this is the one used in looking up predicates)
|
||||||
%
|
%
|
||||||
% has to be last!!!
|
% has to be last!!!
|
||||||
'$expand_a_clause'(MHB, SM0, Cl1, ClO) :- % MHB is the original clause, SM0 the current source, Cl1 and ClO output clauses
|
'$expand_a_clause'(MHB, Cl1, ClO) :- % MHB is the original clause, SM0 the current source, Cl1 and ClO output clauses
|
||||||
'$yap_strip_module'(SM0:MHB, SM, HB), % remove layers of modules over the clause. SM is the source module.
|
source_module(SM0),
|
||||||
|
'$yap_strip_module'(MHB, SM, HB), % remove layers of modules over the clause. SM is the head module.
|
||||||
'$head_and_body'(HB, H, B), % HB is H :- B.
|
'$head_and_body'(HB, H, B), % HB is H :- B.
|
||||||
'$yap_strip_module'(SM:H, HM, NH), % further module expansion
|
'$yap_strip_module'(SM:H, HM, NH), % further module expansion
|
||||||
'$not_imported'(NH, HM),
|
'$not_imported'(NH, HM),
|
||||||
|
@ -450,25 +450,29 @@ export_list(Module, List) :-
|
|||||||
!.
|
!.
|
||||||
'$do_import'(N0/K0-N0/K0, Mod, Mod) :- !.
|
'$do_import'(N0/K0-N0/K0, Mod, Mod) :- !.
|
||||||
'$do_import'(N0/K0-N0/K0, _Mod, prolog) :- !.
|
'$do_import'(N0/K0-N0/K0, _Mod, prolog) :- !.
|
||||||
'$do_import'(_N/K-N1/K, _Mod, ContextMod) :-
|
% '$do_import'(_N/K-N1/K, _Mod, ContextMod) :-
|
||||||
recorded('$module','$module'(_F, ContextMod, _SourceF, MyExports,_),_),
|
% recorded('$module','$module'(_F, ContextMod, _SourceF, MyExports,_),_),
|
||||||
once(lists:member(N1/K, MyExports)),
|
% once(lists:member(N1/K, MyExports)),
|
||||||
functor(S, N1, K),
|
% functor(S, N1, K),
|
||||||
% reexport predicates if they are undefined in the current module.
|
% % reexport predicates if they are undefined in the current module.
|
||||||
\+ '$undefined'(S,ContextMod), !.
|
% \+ '$undefined'(S,ContextMod), !.
|
||||||
'$do_import'( N/K-N1/K, Mod, ContextMod) :-
|
'$do_import'( N0/K-N1/K, M0, ContextMod) :-
|
||||||
functor(G,N,K),
|
%'$one_predicate_definition'(Mod:G,M0:G0),
|
||||||
'$one_predicate_definition'(Mod:G,M0:G0),
|
% M0\=prolog,
|
||||||
M0\=prolog,
|
(M0==ContextMod->N0\=N1;true),
|
||||||
(Mod\=M0->N\=N1;true),
|
functor(G1,N1,K),
|
||||||
G0=..[_N0|Args],
|
(N0 == N1
|
||||||
|
->
|
||||||
|
G0=G1
|
||||||
|
;
|
||||||
G1=..[N1|Args],
|
G1=..[N1|Args],
|
||||||
|
G0=..[N0|Args]
|
||||||
|
),
|
||||||
|
%writeln((ContextMod:G1:-M0:G0)),
|
||||||
recordaifnot('$import','$import'(M0,ContextMod,G0,G1,N1,K),_),
|
recordaifnot('$import','$import'(M0,ContextMod,G0,G1,N1,K),_),
|
||||||
%\+ '$is_system_predicate'(G1, prolog),
|
!.
|
||||||
%'$compile'((G1:-M0:G0), reconsult,(ContextMod:G1:-M0:G0) , ContextMod, R),
|
'$do_import'( _,_,_ ).
|
||||||
fail.
|
|
||||||
% always succeed.
|
|
||||||
'$do_import'(_,_,_).
|
|
||||||
|
|
||||||
'$follow_import_chain'(M,G,M0,G0) :-
|
'$follow_import_chain'(M,G,M0,G0) :-
|
||||||
recorded('$import','$import'(M1,M,G1,G,_,_),_), M \= M1, !,
|
recorded('$import','$import'(M1,M,G1,G,_,_),_), M \= M1, !,
|
||||||
@ -727,4 +731,5 @@ module_state :-
|
|||||||
fail.
|
fail.
|
||||||
module_state.
|
module_state.
|
||||||
|
|
||||||
%% @}
|
%% @}imports
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ assert(Clause) :-
|
|||||||
'$assert'(Clause, assertz, _).
|
'$assert'(Clause, assertz, _).
|
||||||
|
|
||||||
'$assert'(Clause, Where, R) :-
|
'$assert'(Clause, Where, R) :-
|
||||||
'$expand_clause'(Clause0,C0,C),
|
'$expand_clause'(Clause,C0,C),
|
||||||
'$$compile'(CC, Where, C0, R).
|
'$$compile'(C, Where, C0, R).
|
||||||
|
|
||||||
/** @pred asserta(+ _C_,- _R_)
|
/** @pred asserta(+ _C_,- _R_)
|
||||||
|
|
||||||
|
@ -388,13 +388,8 @@ or built-in.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
predicate_property(Pred,Prop) :-
|
predicate_property(Pred,Prop) :-
|
||||||
(
|
'$yap_strip_module'(Pred, Mod, TruePred),
|
||||||
current_predicate(_,Pred),
|
(var(Mod) -> current_module(Mod) ; true ),
|
||||||
'$yap_strip_module'(Pred, Mod, TruePred)
|
|
||||||
;
|
|
||||||
'$current_predicate'(_,M,Pred,system),
|
|
||||||
'$yap_strip_module'(M:Pred, Mod, TruePred)
|
|
||||||
),
|
|
||||||
'$predicate_definition'(Mod:TruePred, M:NPred),
|
'$predicate_definition'(Mod:TruePred, M:NPred),
|
||||||
'$predicate_property'(NPred,M,Mod,Prop).
|
'$predicate_property'(NPred,M,Mod,Prop).
|
||||||
|
|
||||||
|
21
pl/top.yap
21
pl/top.yap
@ -218,23 +218,22 @@ live :-
|
|||||||
'$go_compile_clause'(G, _Vs, _Pos, Where, Source) :-
|
'$go_compile_clause'(G, _Vs, _Pos, Where, Source) :-
|
||||||
'$precompile_term'(G, Source, G1),
|
'$precompile_term'(G, Source, G1),
|
||||||
!,
|
!,
|
||||||
'$$compile'(G1, M, Where, Source, _).
|
'$$compile'(G1, Where, Source, _).
|
||||||
'$go_compile_clause'(G,_Vs,_Pos, _Where, _Source) :-
|
'$go_compile_clause'(G,_Vs,_Pos, _Where, _Source) :-
|
||||||
throw(error(system, compilation_failed(G))).
|
throw(error(system, compilation_failed(G))).
|
||||||
|
|
||||||
'$$compile'(C, Where, C0, R) :-
|
'$$compile'(C, Where, C0, R) :-
|
||||||
'$head_and_body'( M0:C, MH, B ),
|
'$head_and_body'( C, H, B ),
|
||||||
'$yap_strip_module'( MH, Mod, H),
|
'$yap_strip_module'(H,Mod,H0),
|
||||||
'$yap_strip_module'( MB, ModB, BF),
|
|
||||||
(
|
(
|
||||||
'$undefined'(H, Mod)
|
'$undefined'(H0, Mod)
|
||||||
->
|
->
|
||||||
'$init_pred'(H, Mod, Where)
|
'$init_pred'(H0, Mod, Where)
|
||||||
;
|
;
|
||||||
trueq
|
true
|
||||||
),
|
),
|
||||||
% writeln(Mod:((H:-B))),
|
% writeln(Mod:((H:-B))),
|
||||||
'$compile'((H:-ModB:BF), Where, C0, Mod, R).
|
'$compile'((H0:-B), Where, C0, Mod, R).
|
||||||
|
|
||||||
'$init_pred'(H, Mod, _Where ) :-
|
'$init_pred'(H, Mod, _Where ) :-
|
||||||
recorded('$import','$import'(NM,Mod,NH,H,_,_),RI),
|
recorded('$import','$import'(NM,Mod,NH,H,_,_),RI),
|
||||||
@ -784,8 +783,7 @@ Command = (H --> B) ->
|
|||||||
|
|
||||||
'$boot_dcg'( H, B, Where ) :-
|
'$boot_dcg'( H, B, Where ) :-
|
||||||
'$translate_rule'((H --> B), (NH :- NB) ),
|
'$translate_rule'((H --> B), (NH :- NB) ),
|
||||||
'$yap_strip_module'((NH :- NB), M, G),
|
'$$compile'((NH :- NB), Where, ( H --> B), _R),
|
||||||
'$$compile'(G, M, Where, ( H --> B), _R),
|
|
||||||
!.
|
!.
|
||||||
'$boot_dcg'( H, B, _ ) :-
|
'$boot_dcg'( H, B, _ ) :-
|
||||||
format(user_error, ' ~w --> ~w failed.~n', [H,B]).
|
format(user_error, ' ~w --> ~w failed.~n', [H,B]).
|
||||||
@ -877,8 +875,7 @@ gated_call(Setup, Goal, Catcher, Cleanup) :-
|
|||||||
'$precompile_term'(Term, Term, Term).
|
'$precompile_term'(Term, Term, Term).
|
||||||
|
|
||||||
'$expand_clause'(InputCl, C1, CO) :-
|
'$expand_clause'(InputCl, C1, CO) :-
|
||||||
'$yap_strip_module'(InputCl, M, ICl),
|
'$expand_a_clause'( InputCl, C1, CO),
|
||||||
'$expand_a_clause'( M:ICl, M, C1, CO),
|
|
||||||
!.
|
!.
|
||||||
'$expand_clause'(Cl, Cl, Cl).
|
'$expand_clause'(Cl, Cl, Cl).
|
||||||
|
|
||||||
|
@ -97,28 +97,17 @@ undefined_query(G0, M0, Cut) :-
|
|||||||
'$undefp'([M0|G0],true) :-
|
'$undefp'([M0|G0],true) :-
|
||||||
% make sure we do not loop on undefined predicates
|
% make sure we do not loop on undefined predicates
|
||||||
setup_call_cleanup(
|
setup_call_cleanup(
|
||||||
'$undef_setup'(M0:G0, Action,Debug,Current, MGI),
|
'$undef_setup'(Action,Debug,Current),
|
||||||
'$get_undefined_predicate'( MGI, MG ),
|
'$get_undefined_predicate'( M0:G0, MG ),
|
||||||
'$undef_cleanup'(Action,Debug,Current)
|
'$undef_cleanup'(Action,Debug,Current)
|
||||||
),
|
),
|
||||||
'$undef_error'(Action, M0:G0, MGI, MG).
|
'$undef_error'(Action, M0:G0, MG).
|
||||||
|
|
||||||
'$undef_setup'(G0,Action,Debug,Current,G0) :-
|
'$undef_setup'(Action,Debug,Current) :-
|
||||||
yap_flag( unknown, Action, fail),
|
yap_flag( unknown, Action, fail),
|
||||||
yap_flag( debug, Debug, false),
|
yap_flag( debug, Debug, false),
|
||||||
'$stop_creeping'(Current).
|
'$stop_creeping'(Current).
|
||||||
|
|
||||||
|
|
||||||
'$g2i'(user:G, Na/Ar ) :-
|
|
||||||
!,
|
|
||||||
functor(G, Na, Ar).
|
|
||||||
'$g2i'(prolog:G, Na/Ar ) :-
|
|
||||||
!,
|
|
||||||
functor(G, Na, Ar).
|
|
||||||
'$g2i'(M:G, M:Na/Ar ) :-
|
|
||||||
!,
|
|
||||||
functor(G, Na, Ar).
|
|
||||||
|
|
||||||
'$undef_cleanup'(Action,Debug, _Current) :-
|
'$undef_cleanup'(Action,Debug, _Current) :-
|
||||||
yap_flag( unknown, _, Action),
|
yap_flag( unknown, _, Action),
|
||||||
yap_flag( debug, _, Debug).
|
yap_flag( debug, _, Debug).
|
||||||
@ -137,22 +126,22 @@ The unknown predicate, informs about what the user wants to be done
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'$undef_error'(_, _, _, M:G) :-
|
'$undef_error'(_, _, M:G) :-
|
||||||
nonvar(M),
|
nonvar(M),
|
||||||
nonvar(G),
|
nonvar(G),
|
||||||
!,
|
!,
|
||||||
'$start_creep'([M|G], creep).
|
'$start_creep'([M|G], creep).
|
||||||
'$undef_error'(_, M0:G0, _, MG) :-
|
'$undef_error'(_, M0:G0, M:G) :-
|
||||||
'$pred_exists'(unknown_predicate_handler(_,_,_,_), user),
|
'$pred_exists'(unknown_predicate_handler(_,_,_,_), user),
|
||||||
'$yap_strip_module'(M0:G0, EM0, GM0),
|
'$yap_strip_module'(M0:G0, EM0, GM0),
|
||||||
user:unknown_predicate_handler(GM0,EM0,MG),
|
user:unknown_predicate_handler(GM0,EM0,M:G),
|
||||||
!,
|
!,
|
||||||
'$start_creep'([prolog|true], creep).
|
'$start_creep'([M|G], creep).
|
||||||
'$undef_error'(error, Mod:Goal, I,_) :-
|
'$undef_error'(error, Mod:Goal,_) :-
|
||||||
'$do_error'(existence_error(procedure,I), Mod:Goal).
|
'$do_error'(existence_error(procedure,Mod:Goal), Mod:Goal).
|
||||||
'$undef_error'(warning,Mod:Goal,I,_) :-
|
'$undef_error'(warning,Mod:Goal,_) :-
|
||||||
'$program_continuation'(PMod,PName,PAr),
|
'$program_continuation'(PMod,PName,PAr),
|
||||||
print_message(warning,error(existence_error(procedure,I), context(Mod:Goal,PMod:PName/PAr))),
|
print_message(warning,error(existence_error(procedure,Mod:Goal), context(Mod:Goal,PMod:PName/PAr))),
|
||||||
%'$start_creep'([prolog|fail], creep),
|
%'$start_creep'([prolog|fail], creep),
|
||||||
fail.
|
fail.
|
||||||
'$undef_error'(fail,_Goal,_,_Mod) :-
|
'$undef_error'(fail,_Goal,_,_Mod) :-
|
||||||
|
Reference in New Issue
Block a user