2015-06-14 65 views
1

我只是碰到下面的函数进来ML的工作程序员通配符在标准ML

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

1)不能同时使用通配符是空的名单?如果不是,ML如何防止这种情况发生?

2)可能的功能被缩短为:

fun null [] = true 
    | false 

为什么/为什么不呢?

感谢您的帮助, bclayman

回答

5
  1. 是的,他们可以,但匹配的列表将不会是空的,所以null函数持有的结果,即[] :: [],这相当于[[]],不是一个空的列表。

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

fun null [] = true 
    | null _ = false 
+0

小的修正:其中两个通配符匹配空列表中的投入将是'[[]]'。用'[[​​],[]]'只有第一个通配符和空列表匹配 - 第二个匹配'[[]]'。 – sepp2k

+0

@ sepp2k谢谢!你的确是对的。我相应地调整了我的答案。 –