wide 发表于 2024-12-20 18:04:40

关于repeat


{:1_1:}关于repeat运行次数的退出问题,比如下面是运行5次,当运行到2次的时候已经满足要求,这时怎么才能退出repeat循环呢?
(repeat 5
   ()
    ()

   )


m809289064j 发表于 2024-12-21 10:53:53

(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))
            
         )
)

wide 发表于 2024-12-20 19:01:08

飞雪神光 发表于 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))
                )
        )
)

尘缘一生 发表于 2024-12-20 21:55:10

三领哪有个判定块内是否含有文字实体的



[*];;块内是否存在文字类实体-----(一级)----
[*](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
[*])



你有种再说一遍 发表于 2024-12-20 18:12:58

Lisp就是空循环就行了.
想要break就用C#或者C++吧

m809289064j 发表于 2024-12-20 18:14:28

用WHILE函数,达到要求,退出循环

wide 发表于 2024-12-20 18:20:16

m809289064j 发表于 2024-12-20 18:14
用WHILE函数,达到要求,退出循环

我为了跳出repeat循环,做的就是repeat 套在while里,当repeat运行满足时设置一个跳转函数,这个跳转函数就是设置一个nil,跳出while,不管用,还是运行那么多次。

qazxswk 发表于 2024-12-20 18:30:30

用repeat循环,一般不会用具体的数字去做循环次数,我一般都是用(sslength ss)的方式确定环次数。当然,具体问题,具体分析。

你有种再说一遍 发表于 2024-12-20 18:37:08

wide 发表于 2024-12-20 18:20
我为了跳出repeat循环,做的就是repeat 套在while里,当repeat运行满足时设置一个跳转函数,这个跳转函数 ...

最小化demo看看

飞雪神光 发表于 2024-12-20 18:42:47

发代码看看repeat不可中断必须执行完次数才可以 想停止就只用while

飞雪神光 发表于 2024-12-20 20:15:33

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:40:25

本帖最后由 wide 于 2024-12-20 20:46 编辑

楼上的(nth ilst)中的 i 没起作用。
页: [1] 2 3
查看完整版本: 关于repeat