查找列表的成员
大家好,我有以下问题:
命令:!d1
(1.0 9.0)
命令:!lst1
((2.0 3.0) (9.0 6.0) (17.0 7.0) (22.0 15.0) (20.0 20.0) (14.0 20.0) (8.0 19.0)
(3.7 14.0) (1.0 9.0) (6.0 10.0) (11.0 7.0) (12.0 13.0) (9.0 14.0))
命令:(成员d1 lst1)
无
命令:(setq x’(1.0 9.0))
(1.0 9.0)
命令:(成员x lst1)
((1.0 9.0) (6.0 10.0) (11.0 7.0) (12.0 13.0) (9.0 14.0))
d1由给出两条线交点的例程给出。当我试图找到它是否在列表lst1中时,它返回nil。但点(1.0 9.0)实际上在列表中,成员测试与下一个测试中一样返回none nil。
可以提供一个帮助来获得none nil:
(构件d1 lst1)
提前感谢
芦荟 请检查这些报表返回了什么?
(equal d1 x)
(type d1) 再次阅读您的帖子,我刚刚注意到您的变量d1来自交点计算-这意味着它的项很可能带有一些小数(不可见):
(rtos (card1) 2 18)
(rtos (cadr d1) 2 18)
因此,这段代码应该解决这个问题(调整它以匹配您所需的精度):
(member (mapcar '(lambda(x) (distof (rtos x 2 0) 2)) d1) lst1) 大概
(and (eq (type d1) 'LIST)
(vl-some '(lambda (u) (and (eq (car u) (car d1)) (eq (cadr u) (cadr d1)))) lst1)
)
Tharwat可能也想考虑这种情况:
(setq d1 '(1.000000005 9.000000058))
这与OP的需求完全不同。 不太确定:
否则,会员电话就足够了。
让我们拭目以待。
在这件事上,我支持姆萨苏。。
这就足够了,。[与您发布的内容相比]
(member d1 lst1)
至于您的代码,即使您使用“equal”而不是“eq”,结果仍然是预期的结果。现在的结果是“T”
甚至
(vl-some '(lambda (u) (if (and (equal (car u) (car d1) 0.01)
(equal(cadr u) (cadr d1) 0.01)) u)) lst1)
将只生成(1.0 9.0),作为单个列表。正如标题所示,查找列表的成员。。。
也许这就是OP一直想要的。为了测试目标是否存在于列表中,那么vl一些方法就足够了[但使用相同]
(vl-member-if
'(lambda (p)
(vl-every '(lambda (p q)
(equal p q 0.1)
)
d1
p
)
)
lst1
)
((1.0 9.0) (6.0 10.0) (11.0 7.0) (12.0 13.0) (9.0 14.0))
HTH公司 Tharwat、MSasu和pBe
当d1和lst1在内存中时,我输入了Tharwat的代码并调用了它。我得到的是零。列表是我得到的类型。
MSasu的代码运行正常,pBe也给出了相同的结果。
你们三个人的帮助使我掌握了以前我不太清楚的错综复杂的事情。谢谢大家
页:
[1]
2