1:- module(attvar_reader, [read_attvars/1,read_attvars/0,install_attvar_expander/1,uninstall_attvar_expander/1]).
9:- set_module(class(library)). 21:- create_prolog_flag(assert_attvars,false,[keep(true)]). 22:- create_prolog_flag(read_attvars,false,[keep(true)]). 23:- module_transparent((read_attvars/1,read_attvars/0)). 24
25:- use_module((toplevel_variable_names)). 26:- if(\+ current_module(attvar_serializer)). 27:- use_module(library(logicmoo/attvar_serializer)). 28:- endif. 29
30:- multifile(lmcache:use_attvar_expander/1). 31:- dynamic(lmcache:use_attvar_expander/1). 32
33:- multifile(lmcache:never_use_attvar_expander/1). 34:- dynamic(lmcache:never_use_attvar_expander/1).
40install_attvar_expander(M):- lmcache:use_attvar_expander(M),!.
41install_attvar_expander(M):-
42 dmsg(install_attvar_expander(M)),
43 asserta(lmcache:use_attvar_expander(M)),
44 system:multifile(M:term_expansion/4),
45 system:module_transparent(M:term_expansion/4),
46 system:dynamic(M:term_expansion/4),
47 asserta(((M:term_expansion(I,P,O,P):- system_expanded_attvars(M:term,P,I,O)))),
48 system:multifile(M:goal_expansion/4),
49 system:module_transparent(M:goal_expansion/4),
50 system:dynamic(M:goal_expansion/4),
51 set_prolog_flag(read_attvars,true),
52 set_prolog_flag(assert_attvars,true),
53 asserta(((M:goal_expansion(I,P,O,P):- system_expanded_attvars(M:goal,P,I,O)))),
54 !.
61uninstall_attvar_expander(M):-
62 retract(lmcache:use_attvar_expander(M)),!,
63 ignore(retract((M:goal_expansion(I,P,O,P):- system_expanded_attvars(M:goal,P,I,O)))),
64 ignore(retract((M:term_expansion(I,P,O,P):- system_expanded_attvars(M:term,P,I,O)))),
65 (lmcache:use_attvar_expander(M)->true;set_prolog_flag(read_attvars,false)).
66uninstall_attvar_expander(_):-set_prolog_flag(read_attvars,false).
67
68
69
70read_attvars:- read_attvars(true).
71
72read_attvars(TF):-
73 set_prolog_flag(read_attvars,TF),
75 prolog_load_context(module,M),
76 (TF==true->
77 install_attvar_expander(M);
78 uninstall_attvar_expander(M)).
79:- export(read_attvars/1). 80:- system:import(read_attvars/1). 81
82
83user:expand_query(Goal, Expanded, Bindings, ExpandedBindings):- fail,
84 prolog_load_context(module,LC),
85 \+ lmcache:never_use_attvar_expander(LC),
86 current_prolog_flag(read_attvars,true),
87 \+ current_prolog_flag(read_attvars_toplevel,false),
88 \+ current_prolog_flag(xref,true),
89 Struct= ['$variable_names'|Bindings],
90 deserialize_attvars(Struct,Goal,Expanded),
91 [_|ExpandedBindings] = Struct.
92
93
94:- fixup_exports.
Utility LOGICMOO_ATTVAR_READER
This module works with Utility LOGICMOO_ATTVAR_SERIALIZER to allows us to keep attributed variables and files inside the prolog database.