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 difficult。 while 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
默认情况下已经无限循环了。
Common Lisp 的 LOOP 宏因其在循环时拥有一切和厨房水槽而臭名昭着。尽管如此,while
循环 are a bit difficult。 while 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
默认情况下已经无限循环了。