3 votes

manière plus courte d'écrire match

J'ai une fonction qui renvoie un tuple :

let rec pack l = 
            let combine = List.fold packFunction (' ',[], []) l
            match combine with 
                            | (_,b,a) -> b::a |> List.rev |> List.tail

Existe-t-il un moyen d'extraire des parties du tuple sans utiliser l'instruction match ?

Par exemple, je voudrais extraire b et a de (_,b,a) sans utiliser d'instruction de correspondance.

6voto

Lasse Espeholt Points 11944

Quelque chose comme ça ?

let rec pack l = 
    let _,b,a = List.fold packFunction (' ',[], []) l
    b::a |> List.rev |> List.tail

Vous pouvez toujours extraire directement des tuples :

let a,b = (1,1)

o

let a,b = functionWhichReturnsTuple

2voto

ildjarn Points 38377

Le filtrage par motif peut être utilisé dans de nombreux endroits, et pas seulement dans les cas suivants match es. Dans ce cas, il ne semble pas que vous ayez besoin de combine du tout (et il ne semble pas non plus que pack doit être récursif)...

let pack l = 
    let _, b, a = List.fold packFunction (' ', [], []) l
    b::a |> List.rev |> List.tail

1voto

Ed'ka Points 3810

Encore une autre façon de le dire (correspondance de brevets via l'argument lambda) :

let rec pack l =
    List.fold packFunction (' ',[], []) l
    |> fun (_,b,a) -> b::a |> List.rev |> List.tail

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X