14:- module(logicmoo_util_body_textstr,
15 [ enable_body_textstr/0,
16 do_body_textstr/4,
17 disable_body_textstr/0]). 18
19:- style_check(+singleton). 20:- style_check(+discontiguous). 23
30
32:-meta_predicate(do_body_textstr(+,+,+,-)). 33
34
35
36do_body_textstr(_,_ ,A,A):- ( \+ compound(A) ; is_list(A)),!.
37do_body_textstr(Head,Vars ,(DECL,BodI),BodO):- compound(DECL),DECL=cycstring(StrVar), !,
38 do_body_textstr(Head,Vars,stringArg(StrVar,BodI),BodO).
39do_body_textstr(_,_ ,call(H),call(H)):-!.
40do_body_textstr(Head,Vars,stringArg(StrVar,BodI),stringArgUC(StrVar,NewVar,OOO)):- !, vsubst(BodI,StrVar,NewVar,BodO),
41 do_body_textstr(Head,Vars,BodO,OOO).
42do_body_textstr(Head,[StrVar|Vars],BodI,BodO):- !, do_body_textstr(Head,Vars,stringArg(StrVar,BodI),BodO).
43do_body_textstr(Head,Vars,(A;B),(AA;BB)):- !,do_body_textstr(Head,Vars,A,AA),do_body_textstr(Head,Vars,B,BB).
44do_body_textstr(Head,Vars,V^(H),V^(HO)):- !,do_body_textstr(Head,Vars,H,HO).
45do_body_textstr(Head,Vars,(A,B),(AA,BB)):- !,do_body_textstr(Head,Vars,A,AA),do_body_textstr(Head,Vars,B,BB).
46do_body_textstr(Head,Vars,BodI,BodO):- compound(BodI),
47 \+ predicate_property(BodI,static),
48 functor(BodI,F, _),
49 \+ arg(_,v(!,var,call_body_reorder_compare,call_body_reorder,words_append),F),
50 ereq(isT(isa(F,'Predicate'))),
51 ereq(t(argIsa,F,N,StringType)),ereq(ttStringType(StringType)),arg(N,BodI,StrVar),!,
52 do_body_textstr(Head,Vars,stringArg(StrVar,BodI),BodO).
53do_body_textstr(Head,Vars,H,HO):- H=..HL, must_maplist(do_body_textstr(Head,Vars),HL,HOL),HO=..HOL.
54
55stringArg(User,CallWithUser):- vsubst(no_repeats(CallWithUser),User,Cyc,CallWithCyc),!,
56 (ground(User) -> (ssz(User,Cyc),CallWithCyc) ; (CallWithCyc, ssz(User,Cyc))).
57
58ssz(User,Cyc):-cycStringToString(Cyc,User).
59
60stringArgUCTest:-stringArgUCTest('"I"',_).
61stringArgUCTest:-stringArgUCTest(['"I"','"am"'],_).
62stringArgUCTest(User,Cyc):- stringArgUC(User,Cyc,dmsg(User->Cyc)),!.
63
64stringArgUC(User,Cyc,CallWithCyc):- must_det(var(Cyc)),!,stringArgUC2(User,Cyc,CallWithCyc).
65
66stringArgUC2(User,Cyc,CallWithCyc):- var(User),!,CallWithCyc,cycStringToString(Cyc,User).
67stringArgUC2([User,U2|MORE],Cyc,CallWithCyc):- Cyc=[User,U2|MORE],!,CallWithCyc.
68stringArgUC2([User],Cyc,CallWithCyc):- Cyc=User,!,CallWithCyc,atom(Cyc).
69stringArgUC2(User,Cyc,CallWithCyc):- Cyc=User,!,CallWithCyc,atom(Cyc).
70
71cycStringToString(Cyc,User):- (atom(Cyc)->User=[Cyc];User=Cyc),!.
72
73
74
75
76enable_body_textstr:- enable_in_file(do_body_textstr).
77disable_body_textstr:- disable_in_file(do_body_textstr).
78
79:- disable_body_textstr. 80
81
82:- if(true). 84
85:- endif.