关于repeat
{:1_1:}关于repeat运行次数的退出问题,比如下面是运行5次,当运行到2次的时候已经满足要求,这时怎么才能退出repeat循环呢?
(repeat 5
()
()
)
(defun tt1 (p1 lst)
(setq m t)
;(defun tz () (setq m nil))
(setq i 0 )
(while m
(setq lst1 '())
(setq lst1 (nth i lst))
(setq lst1 (mapcar 'reverselst1))
(if (assoc p1 lst1)
(progn
(setq i (1+ i))
(setq m nil);(tz)
)
)
(setq i (1+ i))
)
) 飞雪神光 发表于 2024-12-20 18:42
发代码看看repeat不可中断必须执行完次数才可以 想停止就只用while
(defun tt1 (p1 lst)
(setq m t)
(while m
(defun tz () (setq m nil))
(setq i 0 )
(repeat (length lst)
(setq lst1 '())
(setq lst1 (nth i lst))
(setq lst1 (mapcar 'reverselst1))
(if (assoc p1 lst1)
(progn
(setq i (1+ i))
(tz)
)
)
(setq i (1+ i))
)
)
) 三领哪有个判定块内是否含有文字实体的
[*];;块内是否存在文字类实体-----(一级)----
[*](defun blkiftxt (bname / blk kua name1 tp loop k)
[*](setq kua (dxf1 bname 2) blk (tblobjname "Block" kua) loop t)
[*](while (and loop (setq name1 (entnext blk)))
[*] (setq tp (dxf1 name1 0))
[*] (cond
[*] ((member tp '("TEXT" "MTEXT" "TCH_TEXT" "TCH_MTEXT" "DIMENSION"))
[*] (setq k t loop nil)
[*] )
[*] ((= tp "INSERT")
[*] (setq k (blkiftxt name1))
[*] )
[*] )
[*] (setq blk name1)
[*])
[*]k
[*])
Lisp就是空循环就行了.
想要break就用C#或者C++吧 用WHILE函数,达到要求,退出循环
m809289064j 发表于 2024-12-20 18:14
用WHILE函数,达到要求,退出循环
我为了跳出repeat循环,做的就是repeat 套在while里,当repeat运行满足时设置一个跳转函数,这个跳转函数就是设置一个nil,跳出while,不管用,还是运行那么多次。 用repeat循环,一般不会用具体的数字去做循环次数,我一般都是用(sslength ss)的方式确定环次数。当然,具体问题,具体分析。 wide 发表于 2024-12-20 18:20
我为了跳出repeat循环,做的就是repeat 套在while里,当repeat运行满足时设置一个跳转函数,这个跳转函数 ...
最小化demo看看 发代码看看repeat不可中断必须执行完次数才可以 想停止就只用while wide 发表于 2024-12-20 19:01
(defun tt1 (p1 lst)
(setq m t)
(while m
(defun tt1 (p1 lst)
(setq lst1 '())
(while (null (assoc p1 lst1))
(setq lst1 '())
(setq lst1 (nth i lst))
(setq lst1 (mapcar 'reverse lst1))
)
) 本帖最后由 wide 于 2024-12-20 20:46 编辑
楼上的(nth ilst)中的 i 没起作用。