I'm getting close now, but i have still some problems left: The new system replaces all predicate heads and calls with an extended version for the resolution list. It looks like this: headPred(aArg,....,[Var|[headPred|Rest]]) and aCall(args,...,Rest) what i expect it to do (an example, called with aPred(Var)): aPred([Var|[a|Rest]]) :- bPred(Rest),cPred(Rest). bPred([Var|[b|_]]). cPred([Var|[c|_]]). i assumed now Var->[Var,b,_]->[Var,c,b,_]->[Var,a,Var,c,b,_], but matching cPred fails. I assume that's because the tail is matched to _ only and not to b,_, but why ? Seems like a legit matching to me. To wrap things up, i need to get a list of the called perdicates, and it must work without knowledge of the clause itself. It's very complicated to do something like aPred(In,[aPred|Out]) :- bPred(In,Tmp), cPred(Tmp,Out), because it would requiere analysis of the clause internals .. but currently i see no way around. cheers ChristianReceived on Tue May 18 2010 - 15:15:58 CEST
This archive was generated by hypermail 2.2.0 : Thu Feb 02 2012 - 02:31:58 CET