乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 15|回复: 15

[编程交流] 查找列表的成员

[复制链接]

53

主题

302

帖子

249

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
265
发表于 2022-7-5 23:21:03 | 显示全部楼层 |阅读模式
大家好,
我有以下问题:
命令:!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)
 
提前感谢
芦荟
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:26:57 | 显示全部楼层
请检查这些报表返回了什么?
  1. (equal d1 x)
  1. (type d1)
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:32:35 | 显示全部楼层
再次阅读您的帖子,我刚刚注意到您的变量d1来自交点计算-这意味着它的项很可能带有一些小数(不可见):
  1. (rtos (car  d1) 2 18)
  1. (rtos (cadr d1) 2 18)

 
 
因此,这段代码应该解决这个问题(调整它以匹配您所需的精度):
  1. (member (mapcar '(lambda(x) (distof (rtos x 2 [color=magenta]0[/color]) 2)) d1) lst1)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:36:34 | 显示全部楼层
大概
 
  1. (and (eq (type d1) 'LIST)
  2.     (vl-some '(lambda (u) (and (eq (car u) (car d1)) (eq (cadr u) (cadr d1)))) lst1)
  3. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:40:40 | 显示全部楼层
Tharwat可能也想考虑这种情况:
  1. (setq d1 '(1.000000005 9.000000058))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:41:53 | 显示全部楼层
 
这与OP的需求完全不同。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:45:28 | 显示全部楼层
不太确定:
否则,会员电话就足够了。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:51:40 | 显示全部楼层
 
让我们拭目以待。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 23:54:37 | 显示全部楼层
 
 
在这件事上,我支持姆萨苏。。
这就足够了,。[与您发布的内容相比]
  1. (member d1 lst1)

 
至于您的代码,即使您使用“equal”而不是“eq”,结果仍然是预期的结果。现在的结果是“T”
 
甚至
 
  1. (vl-some '(lambda (u) (if (and (equal (car u) (car d1) 0.01)
  2.                             (equal  (cadr u) (cadr d1) 0.01)) u)) lst1)

 
将只生成(1.0 9.0),作为单个列表。正如标题所示,查找列表的成员。。。
 
也许这就是OP一直想要的。为了测试目标是否存在于列表中,那么vl一些方法就足够了[但使用相同]
 
  1. (vl-member-if
  2. '(lambda (p)
  3.     (vl-every '(lambda        (p q)
  4.           (equal p q 0.1)
  5.         )
  6.        d1
  7.        p
  8.     )
  9.   )
  10. lst1
  11. )

 
((1.0 9.0) (6.0 10.0) (11.0 7.0) (12.0 13.0) (9.0 14.0))
 
HTH公司
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
265
发表于 2022-7-5 23:58:52 | 显示全部楼层
Tharwat、MSasu和pBe
当d1和lst1在内存中时,我输入了Tharwat的代码并调用了它。我得到的是零。列表是我得到的类型。
MSasu的代码运行正常,pBe也给出了相同的结果。
你们三个人的帮助使我掌握了以前我不太清楚的错综复杂的事情。谢谢大家
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:29 , Processed in 0.629215 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表