如何使用 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
是如何格式化每个元素, ~^
表示省略最后一个元素之后的元素间内容, ,
表示把它放在元素之间。当然 ,
可以是任何东西。
对此有很多变化;如果那不是你要找的,也许我可以帮你找到它。
我正在尝试使用 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
是如何格式化每个元素, ~^
表示省略最后一个元素之后的元素间内容, ,
表示把它放在元素之间。当然 ,
可以是任何东西。
对此有很多变化;如果那不是你要找的,也许我可以帮你找到它。