乐筑天下

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

[编程交流] 需要帮助检测L中的错误

[复制链接]

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:48:34 | 显示全部楼层 |阅读模式
你好,
 
我对当前的LISP项目有点迷茫。
 
通过这个程序,我确定一条线的角度,并将其与列表进行比较。如果此角度在此列表中,则应返回true,否则返回false。
 
然而,我似乎无法使代码的红色部分正常工作。当我使用一个数字时,它会正常工作,但当我使用“ang1”时,它失败了。然而,当我使用(princ ang1)时,它显示了我想要与列表进行比较的角度。
 
我认为错误在RtD计算中的某个地方,但我不确定。
 
如果你需要任何其他信息,请告诉我。
 
  1. (defun c:OneBend ( / savesnap comech )
  2. (initget 1 "Forward Backward")
  3. (setq richting (getkword "Is this a Forward or a Backward bend? "))
  4. (setq bend 90)
  5. ;;; DETERMINE ANGLE
  6. (setq pt1 (getpoint "\nSelect point 1: "))
  7. (setq pt2 (getpoint "\nSelect point 2: "))
  8. (setq ang (angle pt1 pt2))
  9. (setq ang0 (/ ang pi))
  10. (setq ang1 (* ang0 180.0))
  11. (if (>= ang1 180.0) (setq ang1 (- ang1 180.0)))
  12. (if (>= ang1 90.0) (setq ang1 (- ang1 180.0)))
  13. (setq ang1 (abs ang1))
  14. (terpri)
  15. (princ ang1)
  16. (terpri)
  17. (setq f90_list '(0.0 8.0 10.0 12.0 14.0 16.0 18.0 20.0 22.0 24.0 26.0 34.0))
  18. (setq b90_list '(0.0 16.0 20.0 22.0 24.0 26.0 28.0 30.0 32.0 34.0 36.0 39.0 40.0 42.0
  19.                         44.0 45.0 46.0 48.0
  20.                         50.0 52.0 55.0 58.0 60.0 63.0 64.0 65.0))
  21. (setq stnd_list '(0.0))
  22. (cond
  23.         ((and (= bend 90) (= richting "Forward"))
  24.                 (setq angle_list f90_list))
  25.         ; FOR FUTURE USE
  26.         ((and (= bend 45) (= richting "Forward"))
  27.                 (setq angle_list f45_list))
  28.         ((and (= bend 90) (= richting "Backward"))
  29.                 (setq angle_list b90_list))
  30.         ; FOR FUTURE USE
  31.         ((and (= bend 45) (= richting "Backward"))
  32.                 (setq angle_list b45_list))
  33.         (t (setq angle_list stnd_list))
  34. )
  35. ; ANGLE PART OF LIST
  36. [color="red"];        (setq apol (member 20.0 angle_list)) ; This works
  37. (setq apol (member ang1 angle_list)) ; This does not work ???[/color]
  38. (if apol (princ "Success!") (princ "Fail!"))
  39. ; PROGRAM CONTINUES HERE
  40. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 19:04:30 | 显示全部楼层
您需要舍入变量ang1以匹配角度列表中指定的角度值,以便成员函数能够检测其存在。。。另一种方法是使用vl位置函数而不是成员函数,因为它速度更快,但仍然需要进行舍入。实际上,最好的选择可能是具有足够lambda函数的vl成员if函数,在该函数中,您不必进行舍入,而是使用适当的模糊容差值指定相等的比较函数。。。
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:17:41 | 显示全部楼层
我认为他想说的是,你试图把20.0000和20.0匹配起来,但这不可行。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 19:26:06 | 显示全部楼层
试试这个:
 
  1. (setq apol (vl-some '(lambda (x) (equal ang1 x 1e-4)) angle_list))
回复

使用道具 举报

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 19:33:24 | 显示全部楼层
非常感谢,这就成功了:-)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 19:44:25 | 显示全部楼层
不客气
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:49:58 | 显示全部楼层
将所有弯曲变量设置为实数45.0 90.0
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:40 , Processed in 0.356828 second(s), 66 queries .

© 2020-2025 乐筑天下

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