乐筑天下

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

[编程交流] 这个Lisp程序给了我一个坏a

[复制链接]

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 10:26:56 | 显示全部楼层 |阅读模式
我有一个简单的lisp程序,可以创建一个星形。我从Michel Trottier那里借的。出于某种原因,当它到达这一行==>(inters pt4 pt1 pt3 pt5)时,它返回一条消息,说==>错误:参数类型错误。据我所知,代码中的一切似乎都很好。
 
你觉得有什么问题吗?
 
  1. ;; by Michel Trottier
  2. ;;
  3. (defun c:star (/ osn pt rd pt1 pt2 pt3 pt4 pt5 pt1a pt2a pt3a pt4a pt5a)
  4.    (setvar "CMDECHO" 0)
  5.    (setvar "OSMODE" 0)
  6.    (setq osn (getvar "OSMODE")   
  7.          pt (getpoint "\nGive the center of the star")
  8.          rd (getdist "\nRadius? : ")
  9.          pt1 (polar pt (dtr 90) rd)
  10.          pt2 (polar pt (dtr 162) rd)
  11.          pt3 (polar pt (dtr 234) rd)
  12.          pt4 (polar pt (dtr 306) rd)
  13.          pt5 (polar pt (dtr 18) rd)
  14.          pt1a (inters pt1 pt3 pt2 pt5)
  15.          pt2a (inters pt2 pt4 pt1 pt3))
  16.          pt3a (inters pt3 pt5 pt2 pt4))
  17.          pt4a (inters pt4 pt1 pt3 pt5))
  18.          pt5a (inters pt4 pt1 pt2 pt5))
  19.    )
  20.    (defun dtr (x)
  21.      (/ (* x pi) 180.0)
  22.    )
  23.   (command "_PLINE" pt1 pt1a pt2 pt2a pt3 pt3a pt4 pt4a pt5 pt5a "C")
  24.   (setvar "OSMODE" osn)
  25. (princ)
  26. )
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 10:37:46 | 显示全部楼层
将DTR定义移到例程的顶部??
... 因此,在需要之前定义它。
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 10:46:15 | 显示全部楼层
看起来你还有很多额外的括号。
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 10:56:37 | 显示全部楼层
 
 
我明白你说的所有额外的括号是什么意思。我将修复它并移动函数(dtr)。
 
非常感谢。
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 11:01:12 | 显示全部楼层
试试这个:
 
  1. ;; by Michel Trottier
  2. ;;
  3. (defun c:star (/ osn pt rd pt1 pt2 pt3 pt4 pt5 pt1a pt2a pt3a pt4a pt5a)
  4. (setvar "CMDECHO" 0)
  5. (setvar "OSMODE" 0)
  6. (setq osn (getvar "OSMODE")
  7. pt (getpoint "\nGive the center of the star")
  8. rd (getdist "\nRadius? : ")
  9. pt1 (polar pt (dtr 90) rd)
  10. pt2 (polar pt (dtr 162) rd)
  11. pt3 (polar pt (dtr 234) rd)
  12. pt4 (polar pt (dtr 306) rd)
  13. pt5 (polar pt (dtr 18) rd)
  14. pt1a (inters pt1 pt3 pt2 pt5)
  15. pt2a (inters pt2 pt4 pt1 pt3)
  16. pt3a (inters pt3 pt5 pt2 pt4)
  17. pt4a (inters pt4 pt1 pt3 pt5)
  18. pt5a (inters pt4 pt1 pt2 pt5)
  19. )
  20. (command "_PLINE" pt1 pt1a pt2 pt2a pt3 pt3a pt4 pt4a pt5 pt5a "C")
  21. (setvar "OSMODE" osn)
  22. (princ)
  23. )
  24. (defun dtr (x)
  25. (/ (* x pi) 180.0)
  26. )
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 11:07:12 | 显示全部楼层
是的,当我去掉多余的部分时,效果很好。谢谢你的帮助。
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 11:19:23 | 显示全部楼层
 
确定DTR是否真的是程序的局部;如果是这样,请将dtr添加到局部变量列表中,否则定义将变为全局定义,并且浪费了在每次调用例程时重新定义它所需的处理时间。
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 11:24:22 | 显示全部楼层
我还注意到,在将变量值保存到osn之前,您正在将“OSMODE”设置为0。
 
您可能打算在设置之前保存该值;允许最终(setvar“OSMODE”osn)恢复预保存的值。
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 11:30:19 | 显示全部楼层
 
我明白你的意思。我会改变的。
 
 
我明白了。因此,(OSMODE)将为0,而不是原始(OSMODE)值。非常感谢您抽出时间。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 20:45 , Processed in 0.374218 second(s), 70 queries .

© 2020-2025 乐筑天下

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