Сопоставление шаблонов в начале строки в f#
Я пытаюсь сопоставить начало строк в f#. Не уверен, что я должен рассматривать их как список символов или что. Любые предложения будут оценены.
вот версия кода psuedo того, что я пытаюсь сделать
let text = "The brown fox.."
match text with
| "The"::_ -> true
| "If"::_ -> true
| _ -> false
Итак, я хочу посмотреть в начале строки и матч. Обратите внимание, что я не соответствую списку строк, просто написал выше как идею сути того, что я пытаюсь сделать.
3 ответа:
параметризованные активные шаблоны на помощь!
let (|Prefix|_|) (p:string) (s:string) = if s.StartsWith(p) then Some(s.Substring(p.Length)) else None match "Hello world" with | Prefix "The" rest -> printfn "Started with 'The', rest is %s" rest | Prefix "Hello" rest -> printfn "Started with 'Hello', rest is %s" rest | _ -> printfn "neither"
Да, вы должны рассматривать их как список символов, если вы хотите использовать выражение соответствия.
просто преобразовать строку:
let text = "The brown fox.." |> Seq.toList
затем вы можете использовать выражение, но вам придется использовать символы (тип элементов списка) для каждого письма:
match text with | 'T'::'h'::'e'::_ -> true | 'I'::'f'::_ -> true | _ -> false
как Брайан предлагает параметризованные активные Шаблоны намного приятнее, есть некоторые полезные шаблоны здесь (перейти в конец страницы).