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

boo*_*toT 3 maxima

我想用自动执行某些输出printf的,但我在努力寻找一种方法来传递给它的参数列表expr_1, ..., expr_n

printf (dest, string, expr_1, ..., expr_n)
Run Code Online (Sandbox Code Playgroud)

我想过使用类似Javascript的spread 运算符,但我甚至不确定我是否需要它.

对于instace,说我有一个要输出的字符串列表

a:["foo","bar","foobar"];
Run Code Online (Sandbox Code Playgroud)

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

s: "~a ~a ~a ~%";
Run Code Online (Sandbox Code Playgroud)

和输出流,比方说os.如何printf以这样的方式调用这些东西,使得结果与写入相同

printf(os,s,a[1],a[2],a[3]);
Run Code Online (Sandbox Code Playgroud)

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

有什么建议?

谢谢.

编辑:

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

apply(printf,append([os,s],a));
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 5

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

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

printf (os, "my list: ~{~a~^, ~}~%", a);
Run Code Online (Sandbox Code Playgroud)

得到a分隔的元素,.这里"~{...~}"告诉printf期望一个列表,并且~a是如何格式化每个元素,~^意味着在最后一个元素之后省略元素间的东西,并且,意味着将它放在元素之间.当然,可以是任何东西.

有很多变化; 如果这不是你想要的,也许我可以帮你找到它.