【问题标题】:Defining types in SML?在 SML 中定义类型?
【发布时间】: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


【解决方案1】:

如果您不在乎使用String.explode 有点低效,那么您可以定义这个谓词:

fun isName s = List.all Char.isAlpha (String.explode s)

否则,您将通过对字符串本身(长度)的递归来实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2021-02-15
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2016-05-17
    • 2023-03-14
    相关资源
    最近更新 更多