标准ML中的通配符

bcl*_*man 1 ml wildcard sml

我刚刚在工作程序员的ML中遇到了以下函数:

fun null [] = true
    | null (_::_) = false
Run Code Online (Sandbox Code Playgroud)

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

2)功能是否可以缩短为:

fun null [] = true 
    | false
Run Code Online (Sandbox Code Playgroud)

为什么/为什么不呢?

谢谢你的帮助,bclayman

Ion*_*tan 5

  1. 是的,他们可以,但匹配的列表不会为空,因此null函数的结果成立,即[] :: []相当于[[]],不是空列表.

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

fun null [] = true 
  | null _ = false
Run Code Online (Sandbox Code Playgroud)