2015-06-14 118 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謝謝!你的確是對的。我相應地調整了我的答案。 –