14:- module(logicmoo_util_body_nauts,
15 [ enable_nautifiers/0,
16 do_nautifier/4,
17 disable_nautifiers/0]). 18
19:- style_check(+singleton). 20:- style_check(+discontiguous). 23
30
31:- ensure_loaded(logicmoo_util_body_file_scope). 32:-meta_predicate(do_nautifier(+,+,+,-)). 33
34
35
36do_nautifier(_,_ ,A,A):- ( \+ compound(A) ; is_list(A)),!.
37do_nautifier(Head,Vars ,(DECL,BodI),BodO):- compound(DECL),DECL=cycnaut(StrVar), !,
38 do_nautifier(Head,Vars,nautArg(StrVar,BodI),BodO).
39do_nautifier(_,_ ,call(H),call(H)):-!.
40do_nautifier(Head,Vars,nautArg(StrVar,BodI),nautArgUC(StrVar,NewVar,OOO)):- !, vsubst(BodI,StrVar,NewVar,BodO),
41 do_nautifier(Head,Vars,BodO,OOO).
42do_nautifier(Head,[StrVar|Vars],BodI,BodO):- !, do_nautifier(Head,Vars,nautArg(StrVar,BodI),BodO).
43do_nautifier(Head,Vars,V^(H),V^(HO)):- !,do_nautifier(Head,Vars,H,HO).
44
45:- enable_body_reorder. 46
47do_nautifier(Head,Vars,BodI,BodO):- compound(BodI),functor(BodI,F, _),
48 reorderBody(cyckb_t_e2c(argIsa,F,N,NAUTType),fail,ttNAUTType(NAUTType)),arg(N,BodI,StrVar),!,
49 do_nautifier(Head,Vars,nautArg(StrVar,BodI),BodO).
57do_nautifier(Head,Vars,H,HO):- H=..HL, must_maplist(do_nautifier(Head,Vars),HL,HOL),HO=..HOL.
58
59
60ttNAUTType('CharacterNAUT').
61ttNAUTType('SubLNAUT').
62ttNAUTType('SubLListOfNAUTs').
64
65
66nautArg(User,CallWithUser):- dtrace,vsubst(no_repeats(CallWithUser),User,Cyc,CallWithCyc),!, (ground(User) -> (ssz(User,Cyc),CallWithCyc) ; (CallWithCyc, ssz(User,Cyc))).
67
68
69nautArgUC(User,Cyc,CallWithCyc):- must_det(var(Cyc)),!,nautArgUC2(User,Cyc,CallWithCyc).
70nautArgUC2(User,Cyc,CallWithCyc):- var(User),!,CallWithCyc,cycNAUTToNAUT(Cyc,User).
71nautArgUC2([User,U2|MORE],Cyc,CallWithCyc):- Cyc=[User,U2|MORE],!,CallWithCyc.
72nautArgUC2([User],Cyc,CallWithCyc):- Cyc=User,!,CallWithCyc,atom(Cyc).
73
74cycNAUTToNAUT(Cyc,User):- (atom(Cyc)->User=[Cyc];User=Cyc),!.
75
76
77
78:- set_prolog_flag(do_nautifier,false). 79
80enable_nautifiers:- enable_in_file(do_nautifier).
81disable_nautifiers:- disable_in_file(do_nautifier).
82
83
84:- if(true). 86
87:- endif.