2010-09-10 20 views
10

Estoy tratando de escribir un patrón que componga otros dos patrones, pero no estoy seguro de cómo hacerlo. Mi entrada es una lista de cadenas (un documento); Tengo un patrón que coincide con el encabezado del documento y un patrón que coincide con el cuerpo del documento. Este patrón debe coincidir con el documento completo y devolver los resultados de los patrones de encabezado y cuerpo.F #: ¿Composición del patrón?

+1

No está seguro de lo que su tratando de hacer aquí, puede publicar su entrada y la salida deseada, y cualquier código que has escrito hasta ahora? – Juliet

Respuesta

23

Puede ejecutar dos patrones juntos usando &. Olvidó algunos detalles en su pregunta, así que aquí hay un código que asumo que es similar a lo que está haciendo.

let (|Header|_|) (input:string) = 
    if input.Length > 0 then 
     Some <| Header (input.[0]) 
    else 
     None 

let (|Body|_|) (input:string) = 
    if input.Length > 0 then 
     Some <| Body (input.[1..]) 
    else 
     None 

El primer patrón captará el primer carácter de una cadena, y el segundo devolverá todo menos el primer carácter. El siguiente código demuestra cómo usarlos juntos.

match "Hello!" with 
| Header h & Body b -> printfn "FOUND: %A and %A" h b 
| _ ->() 

Esto muestra: FOUND: 'H' and "ello!"

+0

+1 ¡Aprendí algo nuevo! – Dario

+0

tanta potencia por diseño. asombroso. – nicolas

+0

Por curiosidad, ¿por qué usas '<|'? –