I think i solved it ... after going through the API the 100th time i found "merge" that works like union without unification .... Christian Wirth schrieb: > Ok, sorry for writing not more, but thought yesterday i have now > completed the current feature (except the small problem) ... but after > sleeping a night over it, i think i must possibly change something > somewhere else. > > Here now the complete problem: > > I have term's in CNF that i split up according to some predicates. The > splitted clauses are added to lists, but this must happen without prolog > trying to bind the variables. > So i decided to convert the terms into strings bevor adding, to prevent > the binding. As several times mentioned, i need to preserve variable > names/numbers exactly. > term_to_bytes preserves variable names but not numbers. term_string does > preserve the numbers but not the names. > In theory term_to_bytes should also perserve the numbers, but it doesn't > work for me ... > I so i used set_var_name to name all variables and use term_to_bytes. > > I can't reproduce the problem without the complete programm .. i assume > it hase something to do when the variables are getting bound, but here > is the relevant code at least: > > myCall(TermA,S1),myCall(TermB,S2),union(S1,S2,S) > > myCall(Term,State) :- > conjunctionlist(Term,List,StringState),maplist(bytes_to_term,StringState,State). > > %Splits state dependent (d_true) from other facts. Temporary conversion > to string to prevent prolog from solving > conjunctionlist((A,B),Independent,Dependent) :- > conjunctionlist(A,IndependentA,DependentA),conjunctionlist(B,IndependentB,DependentB),union(IndependentA,IndependentB,Independent),union(DependentA,DependentB,Dependent),!. > conjunctionlist((A;B),Independent,Dependent) :- > conjunctionlist(A,Independent,Dependent). > conjunctionlist((A;B),Independent,Dependent) :- > conjunctionlist(B,Independent,Dependent),!. > conjunctionlist(\+(d_true(Arg,_)),[],[SArg]) :- preserve(\+(Arg),SArg),!. > conjunctionlist(d_true(Arg,_),[],[SArg]) :- preserve(Arg,SArg),!. > conjunctionlist(Term,[Term],[]). > > preserve(Term,String) :- (foreacharg(X,Term) do > ((var(X),set_var_name(X,'Var'));true)),term_to_bytes(Term,String). > > > Kish Shen schrieb: > >> Christian Wirth wrote: >> >>> i'm currenlty using set_var_name in my programm to get lists like this: >>> >>> List=[pred(Var#1,Var#2)]. >>> >>> >> I am not quite sure what you mean by "get lists like this". >> lib(var_name) is designed purely to allow unique names for variables >> when they are printed. You should not use them in any other way. >> >> >>> i have now a second list >>> >>> List2=[pred(Var#3,Var#4),pred2(Var#3,Var#4)] >>> >>> and then i call union(List,List2,Result) and Result becomes >>> [pred(Var#1,Var#2),pred2(Var#3,Var#4)], but i need >>> [pred(Var#1,Var#2),pred2(Var#1,Var#2)] >>> >>> >> I am not sure I understand how you got this. What exactly did you write? >> >> I just tried: >> >> set_var_name_counter('Var', 1),set_var_name([W,X,Y,Z], 'Var'), >> L1 = [pred(W,X)], L2 = [pred(Y,Z),pred2(Y,Z)], union(L1,L2, L) >> >> and here is the the result: >> >> W = Var#1 >> X = Var#2 >> Y = Var#1 >> Z = Var#2 >> L1 = [pred(Var#1, Var#2)] >> L2 = [pred(Var#1, Var#2), pred2(Var#1, Var#2)] >> L = [pred(Var#1, Var#2), pred2(Var#1, Var#2)] >> >> >>> this should work, but it only does with "normal" variable names like >>> Var .. not with the # in between. >>> >> I don't understand this at all. Using lib(var_name) should not have >> any effect on how the program behave, it only affects the way a >> variable's name is printed. What do you mean it does not work with # >> in between? >> >> >>> Now i have to choices changing set_var_name to create legal names, >>> but the function is build in ?? >>> .. or to get union to somehow correctly consider all named variables ? >>> >> Are you somehow thinking of usng these names in your own source code? >> The source code names have nothing to do with the names lib(var_name) >> produces -- the non-legal names is there to prevent you confusing >> names you write in your source from the names printed using >> lib(var_name). >> >> Cheers, >> >> Kish >> > > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > _______________________________________________ > ECLiPSe-CLP-Users mailing list > ECLiPSe-CLP-Users_at_lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/eclipse-clp-users > >Received on Thu Feb 11 2010 - 14:10:32 CET
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:20 CEST