3
是否有可能模式匹配對像一個列表的集合?例如,考慮下面的代碼:模式匹配對集合
module MySet = Set.Make (struct ... end)
match MySet.empty with
| MySet() -> "Empty Set"
| MySet (x) -> "Set with exactly one element"
| MySet (x, y, _) -> "Set with at least two elements"
當然,一組是一個無序的數據類型,所以我不能期望得到同樣的結合x
和y
在每次運行(儘管有可能實現通過此功能比較函數,但我們對這個問題保持簡單)。
爲什麼我會問這個問題?有時我想檢查一個Set是否爲空,或者它是否只包含一個元素,然後繼續使用該元素,或者它包含兩個元素等等。
我的第一個實現比較了集合的基數,然後我選擇了一個元素或兩個元素等等,但是這樣做有點麻煩,我希望模式匹配會產生更多可讀/可維護的代碼。
感謝您的解釋!我曾希望模式匹配能以某種方式起作用,但你是完全正確的,因爲實現是隱藏的,所以我們不能解構一個集合。 – 2015-04-07 08:27:04