我正在Common Lisp中学习块,并通过以下示例来了解块和return-from命令如何工作:
(block b1
(print 1)
(print 2)
(print 3)
(block b2
(print 4)
(print 5)
(return-from b1)
(print 6)
)
(print 7))
Run Code Online (Sandbox Code Playgroud)
它将按预期打印1、2、3、4和5。将return-from更改为(return-from b2),将打印出1、2、3、4、5和7。
然后,我尝试将其转换为函数,并解析返回位置上的标签:
(defun test-block (arg) (block b1
(print 1)
(print 2)
(print 3)
(block b2
(print 4)
(print 5)
(return-from (eval arg))
(print 6)
)
(print 7)))
Run Code Online (Sandbox Code Playgroud)
并使用(test-block'b1)来查看其是否有效,但无效。有没有条件可以做到这一点的方法吗?