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))

虽然 tagbodygo 不常用,可能是由于“GOTO 被认为是有害的”,但在实现复杂的控制结构(如状态机)时可能会有所帮助。许多迭代构造也扩展为隐式标记体。例如, dotimes 的主体被指定为一系列标签和形式。