可以说我有两个列表,((1 2 3))
和(((1 2 3)) ((4 5)))
。我想知道第一个列表是否是第二个列表的成员。我试图使用subsetp
,但对于此查询它不返回true。我怎样才能做到这一点?如何测试一个列表是否是另一个列表的
3
A
回答
3
如果要将列表作为subsetp
的设置元素,则必须更改:test
关键字的值。
CL-USER 1 > (subsetp '(1 2 3) '(1 2 3 4 5))
T
CL-USER 2 > (subsetp '((1) (2) (3)) '((1) (2) (3) (4) (5)))
NIL
第一个给出T,第二个给出NIL。为什么?因为平等与#'eql
检查,它适用于相同的对象或相同的值和相同类型的数字。由于两个列表不能是相同的对象,因此(eql '(1) '(1))
会给出NIL。 (这可能取决于你的CL实现。)如果你想比较一个conses树,tree-equal
可以帮助你。
CL-USER 3 > (subsetp '((1) (2) (3)) '((1) (2) (3) (4) (5)) :test #'tree-equal)
T
我完全不理解你给出的例子的结构,但我希望这有助于。
+0
不幸的是,它不适用于我的列表结构 –
4
由于Rainer Joswig mentioned in the comments,您并未检查子集,但是对于成员,您可以使用恰当名称的member
函数进行检查。 Member
返回一个广义布尔值,即nil
为false,而某些事物,不一定为t
,非nil
为真。具体而言,如果元素是列表的成员,则member
返回列表的尾部,其第一个元素是元素。
CL-USER> (member 3 '(1 2 3 4 5))
(3 4 5)
CL-USER> (member 7 '(1 2 3 4 5))
NIL
当然,当检查列表中的成员资格时,存在如何将给定项目与列表元素进行比较的问题。 Member
的默认比较是eql
,它处理数字等事情,如上例所示。对于你的情况,但是,你可能想用equal
测试,因为((1 2 3))
可能不是相同对象为(((1 2 3)) ((4 5)))
第一个元素:
CL-USER> (member '((1 2 3)) '(((1 2 3)) ((4 5))))
NIL
CL-USER> (member '((1 2 3)) '(((1 2 3)) ((4 5))) :test 'equal)
(((1 2 3)) ((4 5)))
CL-USER> (member '((4 5)) '(((1 2 3)) ((4 5))) :test 'equal)
(((4 5)))
CL-USER> (member '((1 2 4)) '(((1 2 3)) ((4 5))) :test 'equal)
NIL
相关问题
- 1. 如何检查一个列表是否是另一个列表的子集?
- 2. 如何测试一个列表中的整数是否可以被另一个列表中的整数整除?
- 3. 如何测试一个列表是否包含另一个包含Python中特定项目的列表?
- 4. 确定列表是否是另一个列表的子集HQL
- 5. 检查是否AA列表是另一个列表的片段
- 6. Underscore.js,测试整个阵列是否在另一个阵列中
- 7. 列表是另一个列表
- 8. 如何检查是否列表的列表包含另一个列表
- 9. 如何查找列表是否是另一个列表的子集?
- 10. 检查,如果列表是另一个列表的子列表
- 11. 如何检查元素是否也是另一个列表
- 12. 检查一个列表是否包含另一个列表中的元素
- 13. 数组列表:如何查看一个列表中的数组是否在另一个列表中?
- 14. 查看另一个列表中是否存在列表?
- 15. 确定一个列表是否是序言中另一个列表的子列表
- 16. 是否有API用另一个列表替换列表中的一系列值?
- 17. 计算一个列表有多少次是另一个列表的子列表
- 18. 测试一个列表中的所有元素(列表本身)是否相等
- 19. 测试,如果一个列表包含在另一个
- 20. C#:测试一个对象是否实现了任何一个接口列表?
- 21. C++检查一个列表是否包含一个子列表
- 22. 如何检查列表中的字符串是否在另一个列表中?
- 23. 如何查看列表是否包含Python中的另一个列表?
- 24. 如何测试列表Count是一个确定的值?
- 25. 如何检测如果一个类型是一个列表?
- 26. 如何测试一个UIView是否被另一个UIView触碰?
- 27. 方案断言测试来检查,如果一个列表是从另一个列表中
- 28. 检查一个列表中的任何字符串是否是另一个列表中的子字符串
- 29. 如何创建另一个列表中的一个列表?
- 30. 检查第二个列表是否是第一个列表大小的一半
第一个列表如何将是第二列表的子集? ?? –
因为第二个列表的第一个元素等于第一个列表。 –
这不是一个子集。这是*会员*。第一个列表是第二个列表的成员,但不是子集。 –