【发布时间】:2020-08-14 19:53:59
【问题描述】:
在 Ullman 的 SML 书中
还有一些其他的模式在机器学习中是有意义的,但是是非法的。 例如,我们可能期望能够使用 连接运算符 @ 或算术运算符。
示例 3.20:我们可能希望能够将列表分解为最后一个 元素和列表的其余部分。例如,我们可能会尝试 通过
计算列表的长度fun length(nil) = 0 | length(xs@[x]) = 1 + length(xs); Error: non-constructor applied to argument in pattern: @ Error: unbound variable or constructor: xs但是,正如我们所见,
xs@ [x]模式是不合法的,并且 触发两条错误消息。第一条消息抱怨@是 不是合法的模式构造函数。顺便说一句,如果我们尝试使用,我们会收到一对类似的错误消息 用于构造模式的算术运算符。例如,
fun square(0) = 0 | square(x+l) = 1 + 2*x + square(x);同样是错误的,即使它基于正确的归纳 x^2 的定义。
连接运算符 @ 或算术运算符不是合法的模式构造函数这一事实是有意设计的吗? 为什么会这样?
在大多数其他具有模式匹配的语言中也是如此吗?
谢谢。
【问题讨论】:
-
我试图让这个问题更加集中在一种语言上。我相信在“大多数其他语言”中询问模式匹配的变化使其过于广泛,因此会相应地投票。我欢迎回滚到更具体的问题。
标签: pattern-matching sml ml