如何使用 printf 从可变大小的列表中输出文本?

How to output text from lists of variable sizes using printf?

我正在尝试使用 printf 自动执行一些输出,但我正在努力寻找一种方法将参数列表 expr_1, ..., expr_n in

传递给它
printf (dest, string, expr_1, ..., expr_n)

我想使用 Javascript 的 spread operator 之类的东西,但我什至不确定是否需要它。

例如,假设我有一个要输出的字符串列表

a:["foo","bar","foobar"];

一串适当的格式描述符,比方说

s: "~a ~a ~a ~%";

和一个输出流,比如 os。我怎样才能调用 printf 使用这些东西使得结果与写

相同
printf(os,s,a[1],a[2],a[3]);

然后我可以将其概括为输出可变大小的列表。

有什么建议吗?

谢谢。

编辑:

我刚刚了解到 apply 并且使用我在 OP 中提出的条件,以下似乎非常有效:

apply(printf,append([os,s],a));

Maxima printf 实现了 Common Lisp FORMAT 中的大部分或全部格式化运算符,它们非常广泛;请参阅:http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm 另请参阅 Maxima 中的 ? printf 以获取格式化运算符的缩写列表。

特别是对于列表,您可以执行以下操作:

printf (os, "my list: ~{~a~^, ~}~%", a);

获取 a 的元素,用 , 分隔。这里 "~{...~}" 告诉 printf 期待一个列表, ~a 是如何格式化每个元素, ~^ 表示省略最后一个元素之后的元素间内容, , 表示把它放在元素之间。当然 , 可以是任何东西。

对此有很多变化;如果那不是你要找的,也许我可以帮你找到它。