Я пытаюсь написать шаблон, который состоит из двух других шаблонов, но я не уверен, как это сделать. Мой ввод - это список строк (документ); У меня есть шаблон, который соответствует заголовку документа и шаблону, который соответствует телу документа. Этот шаблон должен соответствовать всему документу и возвращать результаты шаблонов заголовка и тела.
F #: Композиция шаблона?
Ответ 1
Вы можете запускать два шаблона вместе с помощью &
. Вы оставили некоторые детали в своем вопросе, поэтому здесь некоторый код, который я предполагаю, несколько похож на то, что вы делаете.
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!"