Lets say I have two lists, ((1 2 3))
and (((1 2 3)) ((4 5)))
. I want to be able to tell if the first list is a member of the second list. I have tried to use subsetp
, but it does not return true for this query. How can I accomplish this?
相关问题
- Generating powerset in one function, no explicit r
- Drakma and Dexador both fails at USocket call whil
- Forming Lisp code to task — related to flatten lis
- clisp 2.49: asdf cannot find asd
- unfold function in scheme
相关文章
- Does learning one Lisp help in learning the other?
- Common Lisp: Why does my tail-recursive function c
- What is the definition of “natural recursion”?
- How do I write a macro-defining macro in common li
- How can I unintern a qualified method?
- Changing the nth element of a list
- Is a “transparent” macrolet possible?
- sleep in emacs lisp
As Rainer Joswig mentioned in the comments, you're not checking for subsets, but for members, which you can do using the aptly named
member
function.Member
returns a generalized boolean, i.e.,nil
for false, and something, not necessarilyt
, non-nil
for true. Specifically, if an element is a member of the list,member
returns the tail of the list whose first element is the element.Of course, when checking membership in a list, there's a question of how to compare the given item with the elements of the list.
Member
's default comparison iseql
, which works on things like numbers, as shown in the example above. For your case, however, you probably want to test withequal
, since((1 2 3))
might not be the same object as the first element of(((1 2 3)) ((4 5)))
:If you want to have lists as elements of your sets for
subsetp
, you have to change the value of the:test
keyword.The first one gives T, the second one gives NIL. Why? Because equality is checked with
#'eql
which works for identical objects or numbers of the same value and of same type. Since two lists must not be identical objects,(eql '(1) '(1))
gives NIL. (That may depend on your CL implementation.) If you want to compare a tree of conses,tree-equal
can help you.I don't understand the structure of the sets you gave as example completely, but I hope this helps.