其他语言中需要break
语句或continue
语句的代码可以使用公共Lisp和Emacs Lisp中的block
&return-from
或catch
&throw
来完成还有一些代码需要redo
语句,或者至少最好用redo
编写而且redo
语句不必是关于循环的我怎样才能在Lisp中redo
?
如果Lisp中有一个redo
等价物,我认为它的工作方式是这样的:特殊形式with-redo
接受符号和形式,而redo
接受符号表单(with-redo 'foo BODY-FORMS...)
可能在其身体表单中包含(redo 'foo)
,(redo 'foo)
将控制权转移回身体表单的开头。
最佳答案
口齿不清:
(tagbody
start
(do-something)
(go start))
(dotimes (i some-list)
redo
(when (some-condition-p)
(go redo))
(some-more))