Scheme中writeln函数多参数打印格式化字符串的实现方法
实现Scheme多参数格式化打印的几种方法
方法1:连续调用输出函数
标准Scheme中的display、writeln(部分实现叫write-line)仅支持单个数据参数(可选指定输出端口),可以把要打印的内容拆分后逐个调用输出函数,最后手动换行:
(display "the number is ") (display 4) (display "!") (newline) ; 实现writeln的换行效果
用begin块打包成单个表达式更整洁:
(begin (display "the number is ") (display 4) (display "!") (newline))
方法2:自定义多参数版writeln
自己实现一个支持任意多参数的writeln,遍历参数逐个输出后换行:
(define (writeln . args) (for-each display args) (newline))
调用方式完全符合书中示例:
(writeln "the number is " 4 "!") ; 输出:the number is 4!
这里用**点参数(. args)**接收任意数量的输入,for-each负责遍历每个参数执行display。
方法3:字符串拼接后输出
如果你的Scheme实现支持字符串操作(比如Racket、MIT Scheme),可以先把所有内容拼接成单个字符串再输出,注意数值要先转成字符串:
(writeln (string-append "the number is " (number->string 4) "!"))
number->string是标准Scheme函数,用于将数值类型转换为字符串类型。
补充说明
书中的代码能运行,大概率是基于特定Scheme扩展或教学实现(比如DrRacket的教学语言、旧版MIT Scheme),这些实现对writeln做了多参数扩展,而你使用的是标准Scheme环境,所以会触发参数数量错误。
内容的提问来源于stack exchange,提问作者FiveSeven
相关产品推荐
相关产品推荐

