我正在尝试编写一个组成其他两种模式的模式,但我不确定如何去做。我的输入是字符串列表(文档);我有一个模式匹配文档标题和匹配文档正文的模式。此模式应与整个文档匹配,并返回标题和正文模式的结果。
答案 0 :(得分:25)
您可以使用&
一起运行两种模式。你在问题中遗漏了一些细节,所以这里的一些代码与你正在做的有些相似。
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
第一个模式将获取字符串的第一个字符,第二个模式将返回除第一个字符之外的所有字符。以下代码演示了如何一起使用它们。
match "Hello!" with
| Header h & Body b -> printfn "FOUND: %A and %A" h b
| _ -> ()
打印出来:FOUND: 'H' and "ello!"