明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1555|回复: 8

[源码] 【分享】在循环中跳出

  [复制链接]
发表于 2025-9-6 10:36:43 | 显示全部楼层 |阅读模式
本帖最后由 tigcat 于 2025-9-6 23:29 编辑

foreachgoto
下面几种方法大家可以在数据结构庞大时候试试谁快。


示例:

(defun c:tt1 ( / )
  (vl-catch-all-apply
    '(lambda ()
       (foreach x '(1 2 3 4 5)
         (princ (strcat "\n当前值: " (itoa x)))
         (if (= x 3)
           (progn
           (setq &cc 99)
           (princ "结束循环")
           (kjdkfjdlfl);便
           )
         )
       )
     )
  )
  (princ "\n循环已跳出。")
  (princ)
)

(defun c:tt2 ( / lst x)
  (setq lst '(1 2 3 4 5))
  (while lst
    (setq x (car lst))
    (princ (strcat "\n当前值: " (itoa x)))
    (if (= x 3)
      (progn
        (princ "\n跳出循环")
        (setq &cc 97)
        (setq lst nil) ; 让循环条件失效,相当于 break
      )
      (setq lst (cdr lst))
    )
  )
  (princ)
)


根据五楼大佬提醒,补充

; 基本用法 - 查找第一个偶数
(vl-some '(lambda (x) (if (= (rem x 2) 0) x)) '(1 3 5 8 9 10))
; 返回: 8


; 更复杂的例子 - 查找并处理
(setq mylist '(1 2 3 4 5 6))
(vl-some
  '(lambda (item)
    (princ (strcat "\n检查: " (itoa item)))
    (if (> item 3)
      (progn
        (princ (strcat "\n找到大于3的数: " (itoa item)))
        item  ; 返回找到的值,vl-some会停止
      )
      nil     ; 返回nil,vl-some继续下一个元素
    )
  )
  mylist
)



点评

(setq &cc 99)和(setq &cc 97)有何用?  发表于 2025-9-6 15:58

评分

参与人数 2明经币 +2 金钱 +5 收起 理由
Bao_lai + 1 很给力!
lxw320 + 1 + 5 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2025-9-6 16:02:29 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq lst '(1 2 3 4 5))
  3.   (while (setq x (car lst))
  4.     (princ (strcat "\n当前值: " (itoa x)))
  5.     (setq lst (if (= x 3) nil(cdr lst)))
  6.   )
  7.   (princ)
  8. )

评分

参与人数 2明经币 +2 收起 理由
yanshengjiang + 1
tigcat + 1 很给力!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2025-9-6 11:06:29 | 显示全部楼层
这可以的。。程序大的时候用的可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-6 11:11:31 | 显示全部楼层
方便在大选集中调用
回复 支持 反对

使用道具 举报

发表于 2025-9-6 20:38:55 | 显示全部楼层
要中途满足条件就跳出,可以用vl-some

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-6 23:25:56 | 显示全部楼层
kozmosovia 发表于 2025-9-6 20:38
要中途满足条件就跳出,可以用vl-some

感谢大佬指出
回复 支持 反对

使用道具 举报

发表于 2025-9-8 10:14:18 | 显示全部楼层
用while再加个判断应该也可以吧,,while的好处是过程中可以修改表
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-8 12:58:50 | 显示全部楼层
雨的节奏 发表于 2025-9-8 10:14
用while再加个判断应该也可以吧,,while的好处是过程中可以修改表

可以的,三段示例代码中的第二段有示例
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-12-2 10:13 , Processed in 0.293388 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表