Standard ML中chr与Char.chr的差异及SML 97合规性问询
关于SML中
chr和Char.chr的差异与标准合规性 你的测试代码:
val a = chr 65 : char val b = Char.chr 65: char val _ = print (Char.toString a) val _ = print (Char.toString b)
运行输出:
AA
从结果能看出两者功能一致,但从标准规范和兼容性角度,两者有明确区别:
- 功能完全无差异:不管是
chr还是Char.chr,作用都是将整数类型的ASCII码值转换为对应的字符类型值,你的例子里都把65转成了字符'A'。 - 标准合规性区别:
Char.chr是Standard ML 97标准明确规定的写法,属于Char标准模块下的官方函数,所有符合SML97规范的实现(如MLton、SML/NJ、Poly/ML)都必须支持,跨环境兼容性拉满。chr是部分SML实现(比如SML/NJ)为了简化输入,在顶层环境中额外添加的简写别名,不属于SML97标准的强制内容。换用严格遵循标准的轻量实现时,直接写chr可能会触发“未绑定标识符”的错误。
总结:如果要编写符合标准、跨环境通用的SML代码,优先使用Char.chr;如果只是在特定实现(如SML/NJ)下快速测试,chr也能正常使用,但不具备通用性。
内容的提问来源于stack exchange,提问作者Lone Learner
相关产品推荐
相关产品推荐

