Common Lisp 有没有语法糖 while True,即无限循环?

Does Common Lisp have any syntactic sugar for a while True, i.e. infinite, loop?

Common Lisp 的 LOOP 宏因其在循环时拥有一切和厨房水槽而臭名昭着。尽管如此,while 循环 are a bit difficultwhile true 的特殊情况,即无限循环,是一个例外吗?也就是说,Common Lisp 是否为无限循环提供任何语法糖?

我试图在网上找到类似的东西,但都失败了。 This cookbook 建议制作一个循环列表,然后告诉 LOOP 宏为无限列表中的每个元素做一些事情。这显然有效,但它不是任何一种语法糖。作为比较,R 语言允许用户将 while(TRUE){...} 写成 repeat{...}。这就是我心目中的那种语法糖。

注意:尽管我很喜欢看到 Lisp 宏,但我并不要求任何人在 Common Lisp 中实现 repeat。我想从一开始就知道语言中已经有什么。

simple LOOP 宏是一个无限循环。

(loop
  (print 1)
  (print 2))

正文周围有一个名为 NIL 的隐式块,因此您可以使用 (return) 退出循环。这等同于其他语言中的 break,但您也可以提供一个值用作循环表达式的值。

无限循环:

(loop while t
      do ...)

以上可以写得更短:

(loop do ...)

以上可以写得更短:

(loop ...)

那是因为 LOOP 默认情况下已经无限循环了。