我能做什么:
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格式。提前谢谢。
我找到了解决方案,只是使用~v
而不是~d
。下面对此进行了描述:
可以使用 V(或 v(代替指令的前缀参数。在这种情况下,format 将参数从 args 作为参数带到指令。参数应为整数或字符。如果 V 参数使用的参数为 nil,则效果就像省略了该参数一样。
参见:22.3 格式化输出 - Common Lisp HyperSpec
CL-USER > (format nil "~v:<foobar~>" 10)
" foobar"