Common lisp 使用(格式)重复字符串/字符

Common lisp 使用(格式)重复字符串/字符,common-lisp,string-formatting,Common Lisp,String Formatting,在Common lisp中是否有针对(format)的repeat指令,例如(我知道这行不通): 只是想知道是否有比这更优雅的方式 ) 通常,您可以使用迭代格式: (format t "~v@{~A~:*~}" 5 "hi") ~A可以输出各种项目,而不仅仅是字符。有关更多信息,请参阅uselpa的链接答案 上面从第一个参数中获取迭代次数。因此,瓷砖后面的v 其余的参数将被迭代使用。因此,@ 在迭代中,我们返回一个元素。因此,~:* 它类似于(格式t“~v{~A~:*}”5'(“hi”),这可

在Common lisp中是否有针对
(format)
的repeat指令,例如(我知道这行不通):

只是想知道是否有比这更优雅的方式 )

通常,您可以使用迭代格式:

(format t "~v@{~A~:*~}" 5 "hi")
~A
可以输出各种项目,而不仅仅是字符。有关更多信息,请参阅uselpa的链接答案

上面从第一个参数中获取迭代次数。因此,瓷砖后面的
v

其余的参数将被迭代使用。因此,
@

在迭代中,我们返回一个元素。因此,
~:*


它类似于
(格式t“~v{~A~:*}”5'(“hi”)
,这可能更容易理解。

根据您的第一个示例,我刚刚投票决定以重复的形式结束,该示例只是尝试重复一个字符。但是,第二个示例重复了整个字符串,而不是该情况下可能重复的地址中的所有答案。我想我要收回我的得票。@JoshuaTaylor:这就是为什么我写了一个答案。我认为你是对的。(对于任何可能觉得第一个有点神秘的人,就像我一样):
~{
将迭代的其余参数作为列表。我发现有趣的是,在SBCL中,循环版本编译为25行汇编,而格式版本编译为189行。
(defun repeat-string (n string)
  (with-output-to-string (stream)
    (loop repeat n do (write-string string stream))))

(princ (repeat-string 5 "hi"))
(defun write-repeated-string (n string stream)
  (loop repeat n do (write-string string stream)))

(write-repeated-string 5 "hi" *standard-output*))
(format t "~v@{~A~:*~}" 5 "hi")