F#: 模式组合?

11

我正在尝试编写一个将两个其他模式组合起来的模式,但我不确定该如何去做。 我的输入是一个字符串列表(一个文档);我有一个匹配文档头的模式和一个匹配文档正文的模式。 这个模式应该匹配整个文档并返回头部模式和正文模式的结果。


1
不确定你在这里想做什么,请您发布您的输入和期望的输出,以及您已经编写的任何代码? - Juliet
1个回答

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!"


设计带来了如此强大的力量。太棒了。 - nicolas
出于好奇,你为什么使用“<|”? - Nick Heiner
作为替代方案,将以下部分括在括号中,虽然这可能是一个更好的实践。嗯。 - YotaXP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接