Scheme R5RS中如何让display函数打印'()而非()?
解决办法
R5RS标准中内置的两个输出过程,定位差异刚好对应你遇到的格式区别:
display用于输出人类易读的内容,会自动省略字面量语法标记,因此空列表输出为()write用于输出可被read过程解析的标准格式,会保留所有语法标记,空列表输出为'()
你直接将日志输出的调用从display替换为write即可,示例代码如下:
(define x '()) (write x) ;; 输出结果为 => '()
如果你有混合输出的需求,比如要拼接自定义提示文本,也可以自行封装日志过程,即使一定要用display也可以通过特殊判断实现效果:
(define (log-arg arg) (display "给定的参数为:") (if (null? arg) (display "'()") (write arg)) (newline))
额外说明
Scheme原生报错的参数打印逻辑底层用的就是write类的输出过程,所以和你调用write得到的格式完全一致,不会出现参数歧义问题,非常适合错误日志的场景。
内容的提问来源于stack exchange,提问作者Rahul R Badenkal
相关产品推荐
相关产品推荐

