Thank you so much Alex, This works for me! I think having the filter in lisp still lets us take advantage of +QueryChart's efficiency over large sets right? Regards, Kashyap
On Thu, Nov 28, 2019 at 4:37 AM Alexander Burger <[email protected]> wrote: > On Thu, Nov 28, 2019 at 11:45:23AM +0100, Alexander Burger wrote: > > (de f (Names) > > (pilog > > (quote > > @Names Names > > @Gen (mapcan '((C) (list 'nm '+TagVal C)) Names) > > (select (@Item) > > ((@Gen (v +Tag) itm)) > > (lst @Tag @Item tgs) > > (val @Nm @Tag v nm) > > (member @Nm @Names) ) ) > > (print-item @Item) ) ) > > > > But not what you want, right? It is still OR, not AND ... > > This is tough to do in Pilog. As Prolog is not more than a tree *search* > engine, > it is hard to prove that there is NO element in Names which canNOT be > found in > the tags names. > > It is surely possible, with 'or' and 'not' clauses plus cut operators, but > I > don't find it at the moment. > > So I would resort to Lisp in the filter: > > (de f (Names) > (pilog > (quote > @Names Names > @Gen (mapcan '((Nm) (list 'nm '+TagVal Nm)) Names) > (select (@Item) > ((@Gen (v +Tag) itm)) > (^ @ > (fully > '((Nm) > (find > '((This) (member Nm (: v nm))) > (; (-> @Item) tgs) ) ) > (-> @Names) ) ) ) ) > (print-item @Item) ) ) > > (f '("RED" "BLUE")) > > ☺/ A!ex > > -- > UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe >
