标准 ML 中的通配符

Wildcards in Standard ML

我刚刚在 ML for the Working Programmer 中遇到了以下函数:

fun null [] = true
    | null (_::_) = false

1) 两个通配符不能都是空列表吗?如果不是,ML 如何防止这种情况?

2) 函数是否可以缩短为:

fun null [] = true 
    | false

为什么/为什么不?

感谢您的帮助, 克莱曼

  1. 是的,可以,但是匹配列表不会为空,所以null函数的结果成立,即[] :: [],等价于[[]],不是空列表。

  2. 不,这在语法上是无效的。但是,它可以缩短为:

fun null [] = true 
  | null _ = false