我想強化一種模式,以便僅匹配通過附加驗證功能的數字。你可以嵌套一個「雙重缺點」模式匹配?
let (|IsValid|_|) n = ...
let (|Nil|One|Two|) (l : int list) =
match l with
| a :: b :: t -> Two(a + b)
| a :: t -> One(a)
| _ -> Nil
'一' 的情況下很容易:
| IsValid(a) :: t -> One(a)
'兩化' 情況並不明顯,我。它需要驗證數字的總和。我可以在不使用防護裝置的情況下做到這一點嗎?
...
編輯:我可以使用,當後衛(用布爾返流的isValid函數)是這樣的:
| a :: b :: t when isValid a + b -> Two(a + b)
這不僅僅是模式匹配的那麼優雅;更糟的是,a + b應用了兩次。另外請注意,這是我的實際代碼的簡化版本(我並不是試圖簡單地匹配不同長度的列表,例如) - 問題是關於雙重缺陷模式的嵌套匹配。
我怕我不不知道你在問什麼,也不知道你想如何驗證你的號碼。如果你提供了一個樣本輸入和一個預期的輸出,這將有所幫助。 – Juliet 2009-01-07 16:00:12
向我們展示您對「何時」條款的看法,然後我們可以告訴您更好的答案。 – nlucaroni 2009-01-07 21:55:03