What is select ( http://software-lab.de/doc/refS.html#select/3 ) using internally for the filter part?
Seems to me the filter part is a kind of implicit and. On Thu, Jun 30, 2011 at 9:32 AM, Doug Snead <[email protected]> wrote: > More pilog adventures! > > Alex, would it be possible to give pilog an and/2 rule similar to the or/2 > rule that pilog has now? Sometimes refactoring pilog around the lack of an > and/2 is a pain. Here's an example, where a rule has a kind of a logical > expression (with prolog backup): > > > holds(A,S) :- restoreSitArg(A,S,F), F ; > \+ restoreSitArg(A,S,F), isAtom(A), A. > > I'd like to do something like: > > (be holds (@A @S) (or > (and > (restoreSitArg @A @S @F) > (@ solve (list (-> @F)))) > (and > (not (restoreSitArg @A @S @F)) > (isAtom @A) > (@ solve (list (-> @A))) ) ) ) > > Or's ok - but no and. (In pilog.) I think it is fully (?) backtracking over > that expression in prolog too. But using a LISP "and" clause in a rule, like > this: > > (@ and (solve ...) (solve ...)) > > Won't do backtracking over the legs of that (lisp) "and". > > My solution so far is to make the parts of the conjunction be separate rules > to get the desired backtracking: > > (be holds (@A @S) (or > ((holdsRestoreSitArg @A @S @F) > (holdsNotRestoreSitArg @A @S @F)))) > > (be holdsRestoreSitArg (@A @S @F) > (restoreSitArg @A @S @F) > (@ solve (list (-> @F))) ) > > (be holdsNotRestoreSitArg (@A @S @F) > (not (restoreSitArg @A @S @F)) > (isAtom @A) > (@ solve (list (-> @A))) ) > > (The (@ solve (list (-> @x))) -type clause here is trying to treat a naked > variable as a rule clause - a workaround because you can't have a pilog > variable in place of a rule clause - or at least it doesn't get instantiated > like prolog if you try, rather. But this is a separate issue from the and/2 > request.) > > Cheers, > > Doug > > -- > UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe > -- UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe
