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