• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. searching a list of sublists for matching expression

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 144
  • Views 16602
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

searching a list of sublists for matching expression

jaleco
jaleco over 7 years ago

Is there a simple way to search a set of sublists for matching expressions and return the list of sublists that have the expression?

I have been trying the following example and only get the full master list of sublists returned:

mylist='(("one" 1) ("two" 2))

myset=setof(list mylist foreach(item setof(obj list stringp(obj)) rexMatchp("one" item)))

==> (("one 1) ("two" 2))

  • Cancel
  • tweeksii
    tweeksii over 7 years ago

    Try

    assoc("one" mylist)

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tweeksii
    tweeksii over 7 years ago

    It looks like you were trying to do something like this:

    setof(list mylist

      destructuringBind((first second) list

        string(first) && rexMatchp("one" first)

      )

    )

    You could also write that this way:

    setof(list mylist

      stringp(car(list)) && rexMatchp("one" car(list))

    )

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • jaleco
    jaleco over 7 years ago in reply to tweeksii

    thanks so much for your reply, great examples!

    I'm dealing with sublists that are a little less structured than my simple example, and I should have made the example strings longer.

    My sublist fields may vary, the number of field that matches the string may vary, and the string is a partial match.

    Presuming a more complex list/sublist and string search, this seems to work ok :

    foreach(list mylist foreach(item list if(stringp(item) && rexMatchp("match_this" item) then mynewlist=cons(list mynewlist))))

    (Of course, the newlist variable has to be initialized first)

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • mbracht
    mbracht over 7 years ago

    If you have no idea about the list structure (how many nesting levels etc...) I think you need to recursively walk through the list in question...try this one:

    (defun searchList (theList regex "lt")
       (let (sublists result)
          (if (exists el theList (stringp el) && (rexMatchp regex el)) then
             theList
          else
             sublists = (setof el theList (listp el))
             (while sublists
                result = (searchList (car sublists) regex)
                (when result
                   sublists = nil)
                sublists = (cdr sublists))
             result) ))

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • tweeksii
    tweeksii over 7 years ago in reply to jaleco

    thanks so much for your reply, great examples!

    I'm dealing with sublists that are a little less structured than my simple example, and I should have made the example strings longer.

    My sublist fields may vary, the number of field that matches the string may vary, and the string is a partial match.

    I that case, I suggest the following:

    > mylist='(("one" 1) ("two" 2) (3 "buckle") (_ 4 "my") (_ _ 5 "shoe"))
    (("one" 1)
    ("two" 2)
    (3 "buckle")
    (_ 4 "my")
    (_ _ 5 "shoe")
    )
    > setof(list mylist rexMatchList("e" setof(l list stringp(l))))
    (("one" 1)
    (3 "buckle")
    (_ _ 5 "shoe")
    )
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • jaleco
    jaleco over 7 years ago in reply to mbracht

    great examples both - thank you! rexMatchList was handy.  I only have one level of hierarchy, but the recursive search example is much appreciated.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information