Common lisp 使用(格式)重复字符串/字符
在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”),这可
(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")