如何在Common Lisp上的FORMAT控制字符串中指定参数作为变量?

时间:2017-07-11 05:52:52

标签: format common-lisp

我能做什么:

CL-USER> (format nil "~10:<foobar~>")
"    foobar"

但我希望传递10作为参数,如:

CL-USER> (format nil "~d:<foobar~>" 10) ;; but throws error
"    foobar"

存在任何方式吗?因为我不想这样做:

CL-USER> (format nil (format nil "~~~d:<foobar~~>" 10))
"    foobar"

在Python或C中,可以使用*将变量参数传递给控制字符串,如下所示:

print("%*s" % (10, "foobar"))

我想在Common Lisp格式中使用相同的内容。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,只需使用~v代替~d。这在这里描述:

  

代替指令的前缀参数,可以使用V(或v)。在这种情况下,format将args中的参数作为指令的参数。参数应该是整数或字符。如果V参数使用的arg为nil,则效果就好像参数已被省略。

请参阅:22.3 Formatted Output - Common Lisp HyperSpec

CL-USER > (format nil "~v:<foobar~>" 10)
"    foobar"