SML不承认ord或chr

时间:2014-10-17 18:57:23

标签: ml

我在"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";

任一。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您需要执行ord #"c",因为"c"是一个字符串而#"c"是一个字符。

您的功能有两个问题:

  1. 尝试使用^(仅对字符串
  2. 进行操作)将字符和字符串粘合在一起
  3. 尝试在字符串上使用ord
  4. 这是一个丑陋的解决方案:

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

    我认为您可以使用explodeimplode以及带有模式匹配的let块来制作更漂亮的解决方案,但我不记得顶部有足够的SML语法我的头脑去做。