SML / NJ字符串模式匹配

时间:2014-08-07 14:44:20

标签: string pattern-matching sml smlnj

在SML / NJ中是否存在列表模式匹配,但对于字符串?我最终要做的是删除一个字符串的第一个字符,如果它是一个特定的字符串,并且首先考虑这种解决方案,所以如果我能做到这一点而不进一步搞乱,我会很感激。通过将字符串转换为列表形式,等等。

2 个答案:

答案 0 :(得分:4)

不直接。解决此问题的最常用方法是让函数的调用者拆分出第一个字符,以便在其上进行模式匹配。

在SML' 97中,字符串是CharVector.vector(具有签名MONO_VECTOR)。 SML / NJ 确实允许向量上的模式匹配(这是一个非标准的扩展),但遗憾的是不是单形向量,据我所知。

答案 1 :(得分:3)

String.explode将生成字符串中的字符列表。匹配该列表的头部将产生所需的功能:

fun f s =
   let val c = hd(String.explode s)
   in
    case c
    of #"a" => "The character is a!"
    |  #"b" => "The character is b!"
    |  #"c" => "The character is c!"
    | _     => "Not a b or c!"
   end

字符列表建议使用字符串解析状态机方法,而不是像Perl一样的正则表达式模式匹配。