Tagbody
对于组表单中的大量控制, tagbody 特殊运算符可能非常有用。一个内部的形式 tagbody 形式要么是去标签 (这只是符号或整数)或执行的形式。在标签体内, go 特殊运算符用于将执行转移到新位置。这种类型的编程可以被认为是相当低级的,因为它允许任意执行路径。以下是作为标记实体实现 for 循环时的详细示例 :
(let (x) ; for (x = 0; x < 5; x++) { print(hello); }
(tagbody
(setq x 0)
prologue
(unless (< x 5)
(go end))
begin
(print (list 'hello x))
epilogue
(incf x)
(go prologue)
end))
虽然 tagbody 和 go 不常用,可能是由于“GOTO 被认为是有害的”,但在实现复杂的控制结构(如状态机)时可能会有所帮助。许多迭代构造也扩展为隐式标记体。例如, dotimes 的主体被指定为一系列标签和形式。