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

时间:2018-01-30 10:18:37

标签: maxima

我正在尝试使用printf自动化某些输出,但我正在努力找到一种方法将<{1>}中的参数列表传递给它

expr_1, ..., expr_n

我想过使用像Javascript printf (dest, string, expr_1, ..., expr_n) operator这样的东西,但我甚至不确定是否需要它。

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

spread

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

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

和输出流,比如s: "~a ~a ~a ~%"; 。如何以这样的方式调用os,使得结果与编写相同

printf

然后我可以将它推广到输出可变大小的列表。

有什么建议吗?

感谢。

修改

我刚刚了解了printf(os,s,a[1],a[2],a[3]); ,并且使用我在OP中提出的条件,以下内容似乎非常有效:

apply

1 个答案:

答案 0 :(得分:5)

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是如何格式化每个元素,~^意味着省略最后一个元素之后的元素间内容,,表示把它放在元素之间。当然,可以是任何东西。

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