乐筑天下

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

[编程交流] Lisp不工作

[复制链接]

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:51:25 | 显示全部楼层
cond语句的语法不正确。您可以将条件语句视为类似于if语句,但有一堆代码可以运行的槽。如果这是真的,做这个,或者如果这是真的,做这个,如果那些是真的,做这个,等等。
 
cond语法为
 
  1. (cond
  2. ((test expression)(do this))
  3. ((test expression)(do this))
  4. ((test expression)(do this))
  5. ( T (do this))
  6. );end cond

 
如果第一个表达式为true,则第一个“do this”在run中,代码从cond语句继续。
如果第一个测试表达式为零,则移动到第二个测试表达式。如果该值也是nil,则它将继续移动,直到(在我的示例中)最终测试表达式设置为true,因此如果所有其他表达式都为nil,则最后一个表达式将运行,因为它设置为true。
 
这有帮助吗?
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:55:18 | 显示全部楼层
Hippe013,是的,这很有帮助。我正在格式化我的条件语句的介绍部分,就像我对if语句的格式化一样,谢谢!我现在可以加载它,所以调试起来会更容易。再次感谢您的帮助。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:56:35 | 显示全部楼层
Broncos15,
 
我可以看出你是那种想学习的人,大部分工作都是你自己做的。你是我喜欢帮助的人的典型代表。我不想在这里为人们写请求代码。我想教和指导人们学习LISP和VLISP。
 
不客气!
 
当做
 
hippe013
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:59:58 | 显示全部楼层
Hippe013,谢谢你,我真的很感激!我对学习和提高lisp非常感兴趣,非常感谢您的帮助。我还有一个关于代码的快速问题。为什么我稍后在设置中调用变量*offsetdistans*和*offsethightans*时,将其设置为0.5会产生错误的函数错误0.5?这似乎没有意义,因为我只是将它们设置为一个值,然后在设置中使用getreal函数。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:03:43 | 显示全部楼层
*offsetdistans*不是一个子例程,它是一个具有实值的符号。
 
更改:
 
  1. (getreal "\nOffset Distance" "" (*offsetdistans*) ":")

 
收件人:
  1. (getreal (strcat "\nOffset Distance: "  (rtos *offsetdistans* 2 2) ":"))

 
strcat将把一串字符串组合在一起。
 
rtos将实数转换为字符串。
 
()中包含的第一个符号需要是函数、子例程、运算符或隐含列表,即“(1 2 3 4 5)
请注意隐含列表之前的引号。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 19:06:46 | 显示全部楼层
Hippe013,谢谢。如果我理解的话,rtos的2 2将其转换为带2位小数的小数,对吗?此外,在合并代码后,为什么会得到“错误:错误参数类型:numberp:”\n偏移距离:0.50:?
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:09:08 | 显示全部楼层
重新发布最新的代码。我将对其进行快速调试。我喜欢在vlide中为我的代码制作动画。它一步一步地运行代码,通常会在导致错误的地方停止。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 19:11:24 | 显示全部楼层
Hippe013,再次感谢你的帮助。我真的很感激。
  1. (defun CheckorGetSurface ()
  2. (while
  3.    (not
  4.      (and
  5. (setq SurfaceDefaultAdd
  6.        (car
  7.   (entsel
  8.     "\rSelect the Main Surace you to be the default: "
  9.   )
  10.        )
  11. )
  12. (= "AECC_TIN_SURFACE"
  13.    (cdr (assoc 0 (entget SurfaceDefaultAdd)))
  14. )
  15.      )
  16.    )
  17. )
  18. )
  19. (defun c:makeparkingcurb (/ ent ent1 *error*)
  20. (defun *error* (msg)
  21.    (if (not
  22.   (member msg '("Function cancelled" "quit / exit abort"))
  23. )
  24.      (princ (strcat "\nError: " msg))
  25.    )
  26.    (princ)
  27. )
  28. (if (not SurfaceDefaultAdd)
  29.    (CheckorGetSurface)
  30. )
  31. (if (not *offsetdistans*)
  32.    (setq *offsetdistans* 0.5)
  33. )
  34. (if (not *offsetheightans*)
  35.    (setq *offsetheightans* 0.5)
  36. )
  37. (setq whilestop t)
  38. (while whilestop
  39.    (initget 1 "Settings eXit")
  40.    (setq ent
  41.    (entsel
  42.      "\n Select the feature line you want to offset [settings eXit]: "
  43.    )
  44.    )
  45.    (cond
  46.      ((= ent "Settings")
  47.       ((setq *offsetdistans*
  48.       (cond
  49. (getreal (strcat "\nOffset Distance: "  (rtos *offsetdistans* 2 2) ":"))
  50. (rtos *offsetheightans* 2 2)
  51.       )
  52.       )
  53.       (setq *offsetheightans*
  54.       (cond
  55. (getreal (strcat "\nOffset Elevation Difference: "  (rtos *offsetheightans* 2 2) ":"))
  56. (rtos *offsetheightans* 2 2)
  57.       )
  58.       ))
  59.      )
  60.      ((= ent "eXit")
  61.       (setq whilestop nil)
  62.      )
  63.      ((setq entlist (entget ent))
  64.       (cond
  65. (= "AECC_FEATURE_LINE" (cdr (assoc 0 entlist)))
  66. (command "._OffsetFeature" *offsetdistans* ent)
  67. (princ "\nSpecify side to offset: ")
  68. (command pause *offsetheightans* "")
  69. (setq ent1 (entlast))
  70. (command "._AddSurfaceBreaklines" SurfaceDefaultAdd ent1 "")
  71.       )
  72.       (princ "\nNot a feature line")
  73.      )
  74.    )
  75. )
  76. (princ)
  77. )
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:14:54 | 显示全部楼层
有几件事出错了。
 
1.你的条件声明仍然不正常。
 
2.(setq entlist(entget ent))不起作用,因为ent的值不是实体名称。这是entsel返回的选择。
 
尝试更改为
 
  1. (setq [color="red"]sel[/color] (entsel "\n Select the feature line you want to offset [settings eXit]: ")

 
因为此时您不是在处理实体,而是在处理entsel返回的选择。即((2415.64 7423.17 0.0))
 
这辆sel的车返回一个昵称。这就是为什么我强调使用符号名来表示它所代表的数据类型。
 
我还再次建议使用子程序来处理cond语句。只是让代码更容易阅读。
 
给我一秒钟,我来打一个例子。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:19:10 | 显示全部楼层
  1. 10

 
 
这是一个我喜欢如何使用条件语句的示例。使用子程序-它使其更易于阅读,并且不会在代码中丢失。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 20:33 , Processed in 0.670973 second(s), 70 queries .

© 2020-2025 乐筑天下

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