【问题标题】:Can't concatenate a char with a string ML无法将 char 与字符串 ML 连接
【发布时间】:2018-06-18 22:07:37
【问题描述】:

您好,我正在尝试在 ML 中执行 incFirst 函数。该函数执行以下操作:incFirst "bad" = "cad" incFirst "shin" = "thin"。这就是我尝试做的fun incFirst s = chr(ord s + 1) ^ substring(s, 1, size s -1); 我收到以下错误:Can't unify string (In Basis) with char (In Basis) (不同类型的构造函数) 在 chr (ord s + 1) 附近找到 ^ substring (s, 1, ... - ...) 异常-引发“静态错误”失败 如果“^”运算符不起作用,我知道如何将字符与字符串连接起来吗?

【问题讨论】:

    标签: ml polyml


    【解决方案1】:

    运算符在起作用,只是你只能连接字符串, ord 作用于字符,而不是字符串。
    (一个字符与一个字符的字符串不同。)

    您需要提取第一个字符,然后将结果转换为字符串

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

    或者你可以通过列表绕道

    fun incFirst s = let
        fun inc (c::cs) = (chr(ord c + 1))::cs
    in
        implode (inc (explode s))
    end
    

    【讨论】:

    • 这里最好使用String.str而不是Char.toString。 Char.toString 创建可能涉及扩展转义的字符的可打印版本。 String.str 总是创建一个字符串。
    • @DavidMatthews 谢谢。
    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 2012-04-12
    • 2019-07-13
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多