Je souhaite renforcer un motif pour qu'il corresponde uniquement aux nombres qui passent une fonction de validation supplémentaire.Pouvez-vous imbriquer un "" contre ""?
let (|IsValid|_|) n = ...
let (|Nil|One|Two|) (l : int list) =
match l with
| a :: b :: t -> Two(a + b)
| a :: t -> One(a)
| _ -> Nil
Le 'One' est le cas facile:
| IsValid(a) :: t -> One(a)
L'affaire 'Two' est pas évident pour moi. Il doit valider la somme des nombres. Est-ce que je peux faire ceci sans utiliser de garde?
...
Edit: Je pourrais utiliser un quand-garde (avec une fonction isValid bool-retour) comme ceci:
| a :: b :: t when isValid a + b -> Two(a + b)
Ceci est moins élégant que correspondant juste un motif; pire, a + b est appliqué deux fois.
Notez également qu'il s'agit d'une version simplifiée de mon code actuel (je n'essaie pas simplement de faire correspondre différentes longueurs de liste par exemple) - la question concerne la correspondance imbriquée sur le modèle double contre.
Je crains don Je ne sais pas ce que vous demandez, et je ne sais pas comment vous voulez valider vos chiffres. Cela aiderait si vous fournissiez un exemple d'entrée et un résultat attendu. – Juliet
Montrez-nous ce que vous pensez de la clause 'quand', nous pourrons vous donner une meilleure réponse. – nlucaroni