Как проверить, содержит ли строка только алфавиты в F #

У меня есть строка, которая должна содержать только алфавиты. Чтобы проверить, что я написал следующий код

let isCorrectString(str:string) = let isInRange x = (x > 64 && x < 91 ) || (x > 96 && x < 123) || x = 32 not (str.Any(fun ch -> not (isInRange (ch :?> int)) ))

Я, очевидно, использую метод расширения LINQ `Any '. Есть ли лучший способ написать вышеприведенный код?

1 ответ

Если вы хотите просто убедиться, что это правильно, вы можете сделать:

let isCorrectString(str:string) = let isInRange x = (x > 64 && x < 91 ) || (x > 96 && x < 123) || x = 32 let bad = str |> Seq.map (fun c -> isInRange(int c)) |> Seq.exists (fun b -> b = false) not bad

Обратите внимание, что это может быть более простая альтернатива:

let isCorrectString(str:string) = str |> Seq.forall (fun c -> System.Char.IsLetter(c) || c = ' ')

Или, если вы предпочитаете:

let isCorrectString(str:string) = str |> Seq.tryFind (fun c -> not(System.Char.IsLetter(c) || c = ' ')) |> Option.isNone

licensed under cc by-sa 3.0 with attribution.