【问题标题】:SML doesn't acknowledge ord or chrSML 不承认 ord 或 chr
【发布时间】:2014-10-18 03:08:37
【问题描述】:

我正在使用来自"Gentle Intro to ML"的这个例子

 fun incFirst s = chr(ord s + 1) ^ substring(s, 1, size s -1);

但我的“新泽西标准 ML v110.76 [建造时间:2013 年 10 月 22 日星期二 14:04:11]”不喜欢它。

错误:运算符和操作数不一致 [tycon mismatch]

我什至不能这样做:

> ord "c";

不会出错

错误:运算符和操作数不一致 [tycon mismatch]

它不认识

load "Char";

要么。我做错了什么?

【问题讨论】:

    标签: ml


    【解决方案1】:

    你需要ord #"c",因为"c"是一个字符串,#"c"是一个字符。

    你的函数有两个问题:

    1. 尝试使用 ^ 将字符和字符串粘合在一起,它只对字符串起作用
    2. 试图在字符串上使用ord

    一个丑陋的解决方案是这样的:

    fun incFirst s = 
      Char.toString(chr(ord(String.sub(s,0)) + 1)) ^ substring(s, 1, size s -1);
    

    我认为您可能可以使用 explodeimplode 以及带有模式匹配的 let 块制作一个更漂亮的解决方案,但我不记得有足够的 SML 语法来做到这一点。

    【讨论】:

    • 谢谢,丹尼尔。顺便说一句,有没有很好的带有示例的 ML 超规范?
    • 没有超规范,但您可以在线阅读SML Basis 文档。
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2012-04-13
    • 2022-12-04
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2013-04-27
    相关资源
    最近更新 更多