gpt4 book ai didi

lisp - 如何测试一个列表是否是另一个列表的成员

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:53 25 4
gpt4 key购买 nike

假设我有两个列表,((1 2 3))(((1 2 3)) ((4 5)))。我想知道第一个列表是否是第二个列表的成员。我已尝试使用 subsetp,但它不会为此查询返回 true。我怎样才能做到这一点?

最佳答案

作为莱纳·乔斯维格 mentioned in the comments ,您不是在检查子集,而是在检查成员,您可以使用恰当命名的 member 来执行此操作功能。 Member 返回一个广义 bool 值,即 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

关于lisp - 如何测试一个列表是否是另一个列表的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19612193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com