scheme - 方案中的 printf
问题描述
我将如何在方案中执行以下操作?
printf("I went to the park at %d with %s", 4, "Bob");
我现在最接近的是:
(define TIME 4)
(define NAME "Bob")
(display "I went to the park at ") (display TIME) (display " with ") (display NAME) (display ".")
解决方案
您不能在标准方案中执行此操作。许多 Scheme 实现都有一个以Common Lispformat
为模型的过程。例如,Chez Scheme 有一个非常完整的实现,而且它只是一个. 我已经习惯了使用,我从没想过在 lisps 中使用:format
format
printf
format
format
printf
> (format #t "I went to the park at ~A with ~A~%" 4 "Bob")
I went to the park at 4 with Bob
> (printf "I went to the park at ~A with ~A~%" 4 "Bob")
I went to the park at 4 with Bob
当第一个参数为;时,此处format
将输出发送到当前输出端口 自动将输出发送到当前输出端口。Common Lisp 样式格式指令以波浪号 ( ) 为前缀。或美学指令以人类可读的形式打印对象,并且是您大部分时间想要的。还有其他用于格式化数字的指令;我添加了指令,它发出一个换行符。您的原始示例不包含换行符,并且至少在 C 中不会在输出末尾添加换行符(通常这是可取的)。与所有s 之母(即 C's )相比,该过程应该允许对结果进行更多的控制。#t
printf
~
~A
~%
printf
format
printf
fprintf
打印格式化输出的具体工具取决于实现,但 Chez Scheme、MIT Scheme、Gauche Scheme 和 Guile 都实现了format
. Chicken Scheme 实现了format
,也实现了printf
, fprintf
,并且sprintf
它们都使用与 . 相同的格式指令format
。Racket 有许多格式化的输出程序,包括format
, printf
, 和fprintf
; 所有这些也都使用 Common Lisp 风格的格式指令。
您必须查阅特定实现的文档以了解支持哪些格式指令以及它们如何工作;Chez Scheme 文档包含一些信息,但建议咨询 Common Lisp HyperSpec 以获得完整的文档。
还有SRFI-28(基本格式字符串)和SRFI-48(中间格式字符串)为支持它们的实现提供了一些功能。
推荐阅读
- react-native - 为用户保存选择值
- plc - 设定值速度变化不被轴接管
- sql - 存储过程从一个表中获取日期范围并在另一个表中使用 WHERE 子句中的结果
- unity3d - Unity WebXR 错误:要使用 dlopen(),需要使用 Emscripten 的链接支持
- python - 是否有使 requests.get 运行得更快的通用方法或“良好做法”?
- python - 当文件位于同一文件夹中时,Python 可以使用 open() 打开文件吗?
- python - How to add a column containing sequential counts based on the order of another column?
- apache-pulsar - 连接代理时出错:PulsarClientException Connection Refused
- python - 如何让python启动多个进程或程序
- r - 替代 mapply 以覆盖零长度输入的错误