需要 break
语句或 continue
语句的代码可以用 block
& return-from
或 Common Lisp 和 Emacs Lisp 中的 catch
& throw
。然后是需要 redo
语句的代码,或者至少最好用 redo
编写。 redo
语句不必与循环有关。我如何在 Lisp 中执行重做
?
如果在 Lisp 中有一个 redo
等价物,我认为它会像这样工作:特殊形式 with-redo
接受一个符号和形式,以及 redo
需要一个符号。形式 (with-redo 'foo BODY-FORMS...)
可能在其 BODY-FORMS 中包含 (redo 'foo)
,并且 (redo 'foo )
将控制权转移回 BODY-FORMS 的开头。
最佳答案
在普通 Lisp 中:
(tagbody
start
(do-something)
(go start))
(dotimes (i some-list)
redo
(when (some-condition-p)
(go redo))
(some-more))
关于lisp - 如何在 Lisp 中实现重做语句(如在 Perl 和 Ruby 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17360847/