乐筑天下

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

[编程交流] 复杂循环

[复制链接]

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 14:16:34 | 显示全部楼层 |阅读模式
我有一个问题,循环一个函数到前一个点。
 
我写了一个小程序
1、选择图层名称
2、检查是否存在层all ready
如果有
3a。告诉用户它存在
3b。询问他们是否要添加到现有层。
3c。如果要添加,请将其设置为当前。
-如果他们不想添加到它,则返回到选择层名称
 
4.如果该层不存在,则创建它。
 
  1. (DEFUN C:SETLAYER ()
  2. (SETQ PREVLAYER  (GETVAR "CLAYER"))
  3. **********
  4. (SETQ LAYERNAME  (GETSTRING "\n ENTER NAME FOR NEW LAYER : "))
  5. (SETQ CHECKLAYER (TBLSEARCH "LAYER" LAYERNAME ))
  6. ( IF CHECKLAYER
  7.    (PROGN
  8.        (PROMPT "\n LAYER ALREADY EXISTS : ")
  9.        (SETQ CONTINUE (GETSTRING "\n ADD TO CURRENT LAYER? [Y/N] : "))
  10.            (IF ( = CONTINUE Y )
  11.                (COMMAND "-LAYER" "M" LAYERNAME "")
  12.                (-------)
  13.            )
  14.    )
  15.    (COMMAND "-LAYER" "M" LAYERNAME "")
  16. )
  17. (PRINC)
  18. )
  19. (PRINC)

 
在代码中,我想从(------)循环
仅当他们选择N时,才备份到*****。
 
我希望有人能帮忙。因为我在拔头发。剩下的是什么:x:x:x:x:x
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:33:10 | 显示全部楼层
 
 
 
试试这个:您可以根据自己的选择更改函数名。
 
  1. (DEFUN C:SETLAYER ()
  2. (SETQ PREVLAYER  (GETVAR "CLAYER"))
  3. (INPUT)
  4. )
  5. (DEFUN INPUT ()
  6. (SETQ LAYERNAME  (GETSTRING "\n ENTER NAME FOR NEW LAYER : "))
  7. (SETQ CHECKLAYER (TBLSEARCH "LAYER" LAYERNAME ))
  8. ( IF CHECKLAYER
  9.    (PROGN
  10.        (PROMPT "\n LAYER ALREADY EXISTS : ")
  11.        (SETQ CONTINUE (GETSTRING "\n ADD TO CURRENT LAYER? [Y/N] : "))
  12.            (IF ( = CONTINUE Y )
  13.                (COMMAND "-LAYER" "M" LAYERNAME "")
  14.                (INPUT)
  15.            )
  16.    )
  17.    (COMMAND "-LAYER" "M" LAYERNAME "")
  18. )
  19. (PRINC)
  20. )
  21. (PRINC)
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 14:38:45 | 显示全部楼层
非常感谢你
 
一直在寻找各种各样的地方,寻找一种特殊的循环功能。
 
:\没有找到一个tho
 
再次感谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:48:45 | 显示全部楼层
这可能会为您提供对循环行为的最大控制:
 
  1. (defun c:setlayer (/ lay)
  2. (while
  3.    (progn
  4.      (setq lay (getstring t "\nSpecify Layer Name: "))
  5.      (cond ((eq "" lay) nil) ; Exit loop
  6.            ((not (snvalid lay))
  7.             (princ "\n** Invalid Layer Name **"))
  8.            ((tblsearch "LAYER" lay)
  9.             (princ "\n** Layer Already Exists **")
  10.             (initget "Yes No")
  11.             (if (eq "No" (getkword "\nAdd to Current Layer? [Y/N] <Yes> : "))
  12.               nil ; Exit loop
  13.               (not (setvar "CLAYER" lay)))) ; Exit loop
  14.            (t (command "_.-layer" "_M" lay "") nil)))) ; Exit Loop
  15. (princ))
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:56:26 | 显示全部楼层
 
走的路,李!
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 15:00:17 | 显示全部楼层
hrmmm有趣
 
我知道它的基本功能,但你能解释一下
((非(snvalid lay))
 

 
((eq“”lay)无)
以及每个部分的工作原理。
 
我在过去几周才开始使用lisps。
 
非常感谢
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 15:14:00 | 显示全部楼层
 
snvalid检查符号表名称中的有效字符
 
((eq“”lay)nil)表示如果提供了输入或空白信息,则退出循环。
 
所有这些都是更好的错误捕捉。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:21:47 | 显示全部楼层
 
很像Buzzard说的,
 
snvalid将检查不可靠的字符,例如层名称中的*。
 
如果用户在图层名提示中点击enter,则返回一个空字符串(“”),因此循环将退出。Tbh,它只是一个长包装的测试表达式,没有函数在主“循环”中执行。
 
我倾向于使用vla add或entmake创建层,因为它更快、更可靠,但如果您刚刚开始,(命令“_.-layer”。)快速简单
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 02:59 , Processed in 0.764957 second(s), 68 queries .

© 2020-2025 乐筑天下

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