Hi Tareq, You can probably implement StarNode as a minor variation on the current GlobNode code. By the way, that code is here: https://github.com/opencog/atomspace/blob/master/opencog/query/PatternMatchEngine.cc#L227-L288
and specifically, here: https://github.com/opencog/atomspace/blob/master/opencog/query/PatternMatchEngine.cc#L255-L261 So, to implement star-node, all you need to do is to change line 257 to say "if (is_glob and tc)" and set is_glob to false when matching star nodes. The inverted match is here: https://github.com/opencog/atomspace/blob/master/opencog/query/Recognizer.cc#L218-L254 I don't think you need the inverted match in what you are doing. Re: ordered vs unordered: this is already handled automatically. If your data is in an ordered link, then the comparison to the pattern will always be ordered. If the data and pattern are unordered links, then all possible permutations will be explored. One of those permutations will put everything "unknown" next to each-other, where the star node can pick them up. There's even a unit test, somewhere, checking that globnode works with unorderded links. so it should work automatically ... So you do not need to write any extra code to handle the "match everything left over". Unless you mean... Hmm. Unless you mean this: (ListLink ; notice this is an ordered link! (ConceptNode "a") (ConceptNode "b") (StarNode "var") (ConceptNode "p") (ConceptNode "q") (StarNode "var") (ConceptNode "y") (ConceptNode "z")) and you want everything dumped into one big bag. Because right now, the way pattern matching is defined, the above will match only if the stuff in the first location is exactly identical to the stuff in the second location. If you want everything i a big bag, it would be better to use two vars, and consolidate them into one, after the matching is done. --linas On Mon, Nov 7, 2016 at 2:38 AM, Tareq Alkhaldi <tareq.alkha...@gmail.com> wrote: > Hi Linas, > > Okay, I started adding the StarNode variable, but I have a question. So > StarNode should work exactly like GlobNode except that it can accept a > zero, right? What about something that will match zero or more but not > necessarily in order? For example to match all the nodes in the pattern, > and throw all the unmatched nodes (in any location) on that level in the > target side to this variable. It's kind of "AllUnmatchedStuffNode" (for > lacking a better name). > > On Saturday, 29 October 2016 02:11:28 UTC+9, linas wrote: >> >> Hi Tareq, >> >> Currently, the only way to do this is is to write two different patterns, >> one that searches for three words, and one that searches for two. >> >> Another possibility is to use a GlobNode instead of a VariableNode, this >> will accept sequences of neighboring words, as one. However, this might >> not be what you want: the output of a glob is a list. >> >> You do ask an interesting question: it would be nice to have this kind of >> matching. Currently, VariableNode must match exactly one item, and >> GlobNode must match one or more. A "MaybeNode" that matches zero or one, >> and a "StarNode" that matches zero or more could be useful. .. But these >> don't exist, yet. Might not be hard to add ... >> >> --linas >> >> >> >> On Fri, Oct 28, 2016 at 2:47 AM, Tareq Alkhaldi <tareq.a...@gmail.com> >> wrote: >> >>> Hi all, >>> >>> Is there a way to use the PM to match a partial list as the following? >>> >>> Atomspace has this: >>> >>> (EvaluationLink >>> (PredicateNode "pulled@463a5d30-1733-48bc-b188-cb1fcd1d3ee0") >>> (ListLink >>> (ConceptNode "James@c597a7ec-60ab-429d-b003-4782200c7a91") >>> (ConceptNode "pudding@f797c773-b58a-4136-8bad-74b4ad399c63") >>> (ConceptNode "all@3f71ac77-ef99-4499-883d-2ae3332fdb6a") ;;;;; >>> This may or may not exist >>> ) >>> ) >>> >>> Pattern I want to match is: >>> >>> (BindLink >>> (VariableList >>> (VariableNode "$X") >>> (VariableNode "$Y") >>> ) >>> >>> (EvaluationLink >>> (VariableNode "$X") >>> (ListLink >>> (ConceptNode "James@6c0671a2-1b11-4dd9-a787-d27d7779a0c8") >>> (VariableNode "$Y") >>> ) >>> ) >>> (VariableNode "$Y") >>> ) >>> >>> How can I match that without having to add another variable after "$Y" >>> in the list, knowing that the (ConceptNode "all@...") may not always be >>> there. >>> >>> Can this be done? >>> >>> Thanks >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "opencog" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to opencog+u...@googlegroups.com. >>> To post to this group, send email to ope...@googlegroups.com. >>> Visit this group at https://groups.google.com/group/opencog. >>> To view this discussion on the web visit https://groups.google.com/d/ms >>> gid/opencog/764c3a00-c443-46ed-9d05-7aa11ddb4cb8%40googlegroups.com >>> <https://groups.google.com/d/msgid/opencog/764c3a00-c443-46ed-9d05-7aa11ddb4cb8%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- You received this message because you are subscribed to the Google Groups "opencog" group. To unsubscribe from this group and stop receiving emails from it, send an email to opencog+unsubscr...@googlegroups.com. To post to this group, send email to opencog@googlegroups.com. Visit this group at https://groups.google.com/group/opencog. To view this discussion on the web visit https://groups.google.com/d/msgid/opencog/CAHrUA35nhaWVXXk1Q0USi0o1ryeEEU6S6WJ4EwSrqKK75k-%3DBA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.