Loops 哪个更惯用:dotimes vs loop repeat?

Loops 哪个更惯用:dotimes vs loop repeat?,loops,common-lisp,Loops,Common Lisp,这些代码示例中,哪一个更惯用 (dotimes (_ 10) (write-line "Hello")) 或 或者,在Common Lisp中是否没有首选的迭代循环方式,我们应该只使用我们喜欢的方法?在ANSI Common Lisp中,Paul Graham反对使用循环,因为该标准规定得很差(“该宏的唯一真正定义是它的实现…”);然而,也存在一些问题 在您的示例中,dotimes可以说更简单,但它需要一次性变量。。出于这个原因,我更喜欢这里的循环——但对循环的看法确实有很大差异。最后一点,正

这些代码示例中,哪一个更惯用

(dotimes (_ 10) (write-line "Hello"))

或者,在Common Lisp中是否没有首选的迭代循环方式,我们应该只使用我们喜欢的方法?

在ANSI Common Lisp中,Paul Graham反对使用
循环,因为该标准规定得很差(“该宏的唯一真正定义是它的实现…”);然而,也存在一些问题

在您的示例中,
dotimes
可以说更简单,但它需要一次性变量
。出于这个原因,我更喜欢这里的
循环
——但对
循环
的看法确实有很大差异。最后一点,正如Peter Seibel所说,“一些Lisp黑客喜欢LOOP,其他人讨厌它。LOOP的粉丝喜欢它,因为它提供了一种简洁的方式来表达某些常用的循环结构。它的批评者不喜欢它,因为它不够Lispy。”

在ANSI Common Lisp中,Paul Graham反对使用
LOOP
,因为标准规定得很差(“这个宏的唯一真正定义是它的实现…”);然而,也存在一些问题


在您的示例中,
dotimes
可以说更简单,但它需要一次性变量
。出于这个原因,我更喜欢这里的
循环
——但对
循环
的看法确实有很大差异。最后一点,正如Peter Seibel所说,“一些Lisp黑客喜欢LOOP,其他人讨厌它。LOOP的粉丝喜欢它,因为它提供了一种简洁的方式来表达某些常用的循环结构。它的批评者不喜欢它,因为它不够Lispy。”

这没什么关系。使用任何一个

您还可以添加自己的控制运算符:

(defmacro repeat (n &body body)
  `(loop repeat ,n do (progn ,@body)))
然后使用它:

CL-USER 52 > (repeat 10
               (write-line "hello")
               (write-line "world"))
hello
world
hello
world
...
world
hello
world
NIL

这无关紧要。使用任何一个

您还可以添加自己的控制运算符:

(defmacro repeat (n &body body)
  `(loop repeat ,n do (progn ,@body)))
然后使用它:

CL-USER 52 > (repeat 10
               (write-line "hello")
               (write-line "world"))
hello
world
hello
world
...
world
hello
world
NIL