【发布时间】:2017-09-29 07:49:28
【问题描述】:
如果我想检查一个字符串是否以字母开头并且其余字符可以是字母或数字,我将如何定义由这些条件定义的数据类型?或者模式匹配会是更好的路线,如果是,我将如何检查?
【问题讨论】:
-
你真的不会定义一个 datatype 来定义它。相反,编写一个
string -> bool类型的函数来验证条件。提示:它以字母开头andalso字符串的其余部分具有特定的属性。查看一些关于字符串和字符的 SML 标准库函数。您可以将字符串分解为一个字符列表,并验证列表的头部是否满足一个属性,而列表的尾部满足另一个属性。 -
那么我的功能会是这样吗?
fun isName(s : string): bool = val exp = String.explode(s) if ((isAlpha(hd exp)) andalso map(isAlphaNum, tl exp) then true else false -
还是应该更符合这一点?
fun isName(s : string): bool = val exp = String.explode(s) if isAlpha(hd exp) then let fun chk (x::xs) = if isAlphaNum x then chk(xs) else false | chk ([]) = true in chk(tl(exp)) end else false
标签: string types pattern-matching sml smlnj