lisp - 如何在 Lisp 中实现重做语句(如在 Perl 和 Ruby 中)

标签 lisp common-lisp redo control-structure

需要 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/

相关文章:

common-lisp - 为什么我需要评估新 REPL 的 defpackage?

swift - 使用 attributedText 在 UITextView 中实现撤消和重做

database - Oracle 是否使用窃取/非强制方法?

image - 保存 lisp 状态

vim - MacVim:slimv 无法启动

emacs - SLIME 是否有快捷键可以在 slime 模式下注释 Lisp 代码块?

java - 如何对所有文本组件使用 Ctrl+Z 和 Ctrl+Y?

scheme - 如何在 Breakout 中让球与砖 block 碰撞( Racket )

variables - Lisp 中的未绑定(bind)变量

loops - 如何在 lisp 中生成一个笛卡尔积?