snddd2000 发表于 2013-11-22 15:25:11

请教循环退出的问题

请问,类似foreach、mapcar和repeat实现的循环语句,如何实现中间满足条件后结束循环,继续往下执行,而不需要继续剩余的无用循环了?

ll_j 发表于 2013-11-22 15:34:26

我的看法是,需要退出,那就用while循环,使用mapcar、foreach、repeat这类定量的循环语句是无法中途退出循环的,除非使用条件+exit,但这样就不仅仅退出循环了,而是退出程序了。
mapcar等定量循环体一般有相对优化的算法,如果再生硬地加进一个退出相关的判断语句,即使能退出,从效率来说,也应该是得不偿失的。

snddd2000 发表于 2013-11-22 16:27:47

受教了。谢谢!

qiuhaitao110 发表于 2013-11-23 10:32:25

这个我比较在行 while 可以退出的。当条件为nil就可以不循环了。

snddd2000 发表于 2013-11-29 19:32:59

(setq loop T)
(mapcar        '(lambda (x)
           (if loop
             (progn (if        (equal x 20)
                      (setq loop nil)
                  )
             )
           )
       )
        '(10 20 30)
)
没办法只能在mapcar里加个判断。不过运行次数不会变化的。
页: [1]
查看完整版本: 请教循环退出的问题