Did you know ... Search Documentation:
Pack logicmoo_base -- prolog/logicmoo/plarkc/logicmoo_unused_plarkc.txt

/** <module> logicmoo_i_mpred_prolog % Provides a prolog dabase in these predicates... % % t/N % hybridRule/2 % % % Logicmoo Project PrologMUD: A MUD server written in Prolog % Maintainer: Douglas Miles % Dec 13, 2035 % */

end_of_file. end_of_file. end_of_file. end_of_file. end_of_file.

:- include(logicmoo_mpred_header).

lmconf:mpred_provide_write_attributes(F,A,multifile):- multifile(F/A). lmconf:mpred_provide_write_attributes(F,A,thread_local):- thread_local(F/A). lmconf:mpred_provide_write_attributes(F,A,dynamic):- dynamic(F/A). lmconf:mpred_provide_write_attributes(F,external(Module)):- dmsg(decl_mpred(F,external(Module))),not(lmconf:mpred_user_kb(Module)),must_det(arity(F,A)),functor(HEAD,F,A),must_det(predicate_property(Module:HEAD,_)),!.

lmconf:mpred_provide_read_attributes(Obj,PropVal):- fail, safe_univ(PropVal,[Prop,NonVar|Val]),safe_univ(CallVal,[Prop,Obj,NonVar|Val]), predicate_property(CallVal,_),!,mpred_call(CallVal).

lmconf:mpred_provide_read_attributes(F,_,_):-lmconf:mpred_isa(F,prologHybrid),!,fail. lmconf:mpred_provide_read_attributes(F,A,prologDynamic(F,A)):-lmconf:mpred_isa(F,prologDynamic). lmconf:mpred_provide_read_attributes(F,A,Why):-functor_safe(P,F,A),lmconf:mpred_provide_read_attributes(P,F,A,Why).

lmconf:mpred_provide_read_attributes(P,F,A,is_static_predicate(P)):-is_static_predicate(user,F,A). lmconf:mpred_provide_read_attributes(P,_,_,predicate_property(P,foreign)):-predicate_property(P,foreign),!. lmconf:mpred_provide_read_attributes(P,_,_,predicate_property(P,built_in)):-real_builtin_predicate(P),!. lmconf:mpred_provide_read_attributes(P,_,_,predicate_property(P,imported_from(system))):-predicate_property(P,imported_from(system)).

:-export(prolog_side_effects/1). prolog_side_effects(G):-var(G),!,fail. prolog_side_effects(F/A):- ((integer(A);current_predicate(F/A)),functor(G,F,A)), prolog_side_effects(G). prolog_side_effects(G):-get_functor(G,F),lmconf:mpred_isa(F,prologSideEffects),!. prolog_side_effects(G):-predicate_property(G,number_of_rules(N)),N >0,clause(G,(B,_)),compound(B),!. prolog_side_effects(G):-predicate_property(G,exported),!. prolog_side_effects(G):-functor_h(G,F),lmconf:mpred_isa(F,prologDynamic),!. prolog_side_effects(G):-get_mpred_prop(G,predStub(prologDynamic)),!. prolog_side_effects(P):-atom(P),!,prolog_side_effects(P/_).

lmconf:mpred_provide_storage_clauses(G,B,(prologRef(Mod:Ref))):-predicate_property(G,number_of_clauses(_)),clause(G,B,Ref),clause_property(Ref,predicate(Mod:_)).

cant_redefine(PI):-real_builtin_predicate(PI);predicate_property(PI,imported_from(lists)).

lmconf:mpred_provide_setup(Op,HeadIn,StubType,OUT):- StubType = prologDynamic, get_pifunctor(HeadIn,Head,F), predicate_property(Head,_), not(lmconf:mpred_isa(F,prologHybrid)), must(OUT=defined(lmconf:mpred_provide_setup(Op,Head,StubType))),!.
lmconf:mpred_provide_setup(Op,HeadIn,prologDynamic,OUT):- get_functor(HeadIn,F),lmconf:mpred_isa(F,prologHybrid),retractall(lmconf:mpred_isa(F,prologDynamic)), MSG = trace_or_throw(prologOnly_was_hybrid(HeadIn,Op)), wdmsg(MSG),must(OUT=MSG),!.

lmconf:mpred_provide_setup(Op,HeadIn,StubType,OUT):- StubType = prologDynamic, get_pifunctor(HeadIn,Head,F,A), show_call_failure(not(cant_redefine(Head))), must((Op= call(_))), not(current_predicate(F/A)), module_transparent(F/A),export(F/A),dynamic_safe(F/A), asserta_if_new(lmconf:mpred_isa(F,predStub(StubType))), asserta_if_new(lmconf:mpred_isa(F,StubType)),!, must(OUT=defined(lmconf:mpred_provide_setup(Op,Head,StubType))).

lmconf:mpred_provide_setup(Op,HeadIn,StubType,OUT):- StubType = prologDynamic, get_pifunctor(HeadIn,Head,F,A), show_call_failure(not(cant_redefine(Head))), must((Op= call(_))), must_det_l(( (provide_clauses_list(Head,HBLIST)), erase_mpred_storage_op(Head), (lmconf:mpred_isa(F,prologHybrid) -> show_call((predicate_property(Head,thread_local)->retract_all(Head:-_);abolish(F,A);true)) ; true), retract_all((lmconf:mpred_isa(F,prologHybrid):-true)), retract_all((lmconf:mpred_isa(F,stubType(prologHybrid)):-true)), module_transparent(F/A),export(F/A),dynamic_safe(F/A), asserta_if_new(lmconf:mpred_isa(F,predStub(StubType))), asserta_if_new(lmconf:mpred_isa(F,StubType)), forall(member(HB,HBLIST),must(mpred_modify(change(assert,z),HB))),!, must_same_clauses(Head,HBLIST))), must(OUT=defined(lmconf:mpred_provide_setup(Op,Head,StubType))).
user_dynamic_multifile_exported(_):- lmconf:mpred_user_kb(user),!. user_dynamic_multifile_exported(Prop/Arity):- lmconf:mpred_user_kb(M), '@'( M:decl_mpred(Prop/Arity) , M).

%retract_all((G:-B)) :-!, forall(clause(G,B,Ref),erase(Ref)). retract_all(HB) :- ignore((retract(HB),fail)).

is_static_pred(Head:-_):-!,predicate_property(Head,_),not(predicate_property(Head,dynamic)). is_static_pred(Head):-predicate_property(Head,_),not(predicate_property(Head,dynamic)).

prolog_lmconf:mpred_provide_storage_op(Op,G):- G\=isa(_,_), get_functor(G,F),lmconf:mpred_isa(F,prologDynamic),!, prolog_op(Op,G). prolog_lmconf:mpred_provide_storage_op(Op,G):- G\=isa(_,_), get_functor(G,F),lmconf:mpred_isa(F,prologBuiltin),!, prolog_op(Op,G). prolog_lmconf:mpred_provide_storage_op(Op,G):- G\=isa(_,_), get_functor(G,F),not(lmconf:mpred_isa(F,prologHybrid)),!,current_predicate(_,G), prolog_op(Op,G). use_if_modify_new:- current_predicate(assert_if_new/1). prolog_op(change(AR,Op), G):-ensure_dynamic(G),!,prolog_modify(change(AR,Op), G).

prolog_op(_,clause(G,B)):-!,clause_asserted(G,B). prolog_op(_,clause(G,B,Ref)):-!,clause(G,B,Ref).

prolog_op(query(_,Op),G):-!,prolog_op(Op,G). prolog_op(call(Op),G):-!, prolog_op(Op,G). prolog_op(clauses(Op),G):-!, prolog_op(Op,G). prolog_op(is_asserted,(G:-B)):-!,clause_asserted(G,B). prolog_op(is_asserted,(G)):-!,clause_asserted(G,true).

prolog_op(conjecture,G):-!, mpred_call(G). prolog_op(call,G):-!, mpred_call(G). prolog_op(Op,G):- reduce_mpred_op(Op,Op2), on_x_debug(call(Op2,G)).

prolog_modify(_Op,(:-(G))):-!, mpred_call(G). prolog_modify(change(assert,z),G):- use_if_modify_new,!,assertz_if_new(G). prolog_modify(change(assert,a),G):- use_if_modify_new,!,asserta_if_new(G). prolog_modify(change(assert,_),G):- use_if_modify_new,!,assert_if_new(G). prolog_modify(change(assert,z),G):-!,assertz(G). prolog_modify(change(assert,a),G):-!,asserta(G). prolog_modify(change(assert,_),G):-!,assert(G). prolog_modify(change( retract,all),G):-!,retractall(G). prolog_modify(change(retract,one),(G-B)):-!,retract((G-B)).

prolog_modify(change(retract,_),G):-!,retract(G). prolog_modify(Op,G):- reduce_mpred_op(Op,Op2), mud_call_store_op(Op2,G).

:- op(1120,fx,decl_mpred_prolog).