如何使用printf输出可变长度列表中的文本?
用
apply实现printf的任意长度参数自动化输出 哈哈,你已经摸到正确路子啦!要解决给printf传递任意长度参数列表的问题,apply函数就是最直接的解决方案,你自己写的apply(printf,append([os,s],a));已经完美实现需求了。
举个你提到的具体场景:
- 待输出的字符串列表:
a = ["foo","bar","foobar"] - 格式描述符串:
s = "~a ~a ~a ~%" - 目标输出流:
os
只需要通过append把输出流、格式串和参数列表合并成一个完整的参数列表,再用apply将这个列表“展开”传递给printf即可:
(apply printf (append [os, s] a))
原理说明
apply函数的核心作用就是将一个函数与一个参数列表绑定,把列表中的每个元素依次作为函数的独立参数传入。上面的代码完全等价于手动写出所有参数的调用:
(printf os s "foo" "bar" "foobar")
这个方法还能无缝推广到任意长度的列表——不管你的参数列表有多少元素,append都会把os、s和所有列表元素合并成一个统一的参数列表,apply负责把它们逐个“喂”给printf,彻底实现输出自动化。
内容的提问来源于stack exchange,提问作者booNlatoT
相关产品推荐
相关产品推荐

