【发布时间】:2014-09-30 20:50:33
【问题描述】:
在 SML/NJ 中是否有类似列表模式匹配的东西,但对于字符串?我最终想要做的是删除字符串的第一个字符,如果它是一个特定的字符,并且首先想到的是这种解决方案,所以如果我能做到这一点而不进一步弄乱例如,我将不胜感激。通过将字符串转换为列表形式,等等。
【问题讨论】:
标签: string pattern-matching sml smlnj
在 SML/NJ 中是否有类似列表模式匹配的东西,但对于字符串?我最终想要做的是删除字符串的第一个字符,如果它是一个特定的字符,并且首先想到的是这种解决方案,所以如果我能做到这一点而不进一步弄乱例如,我将不胜感激。通过将字符串转换为列表形式,等等。
【问题讨论】:
标签: string pattern-matching sml smlnj
不直接。解决此问题的最常见方法是让函数的调用者拆分第一个字符,以便您可以对其进行模式匹配。
在 SML'97 中,字符串是 CharVector.vector(具有签名 MONO_VECTOR)。 SML/NJ 确实 允许对向量进行模式匹配(这是一个非标准扩展),但不幸的是,据我所知,单态向量不允许。
【讨论】:
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 的正则表达式模式匹配。
【讨论】: