Replace F:替换为。替换(“旧值”、“新值”)

Replace F:替换为。替换(“旧值”、“新值”),replace,f#,char,substitution,Replace,F#,Char,Substitution,我正在玩弄F#语法 在瑞典,我们有一款名为“Backslang”的游戏(谷歌从“Rövarspråk”翻译过来) 规则很简单。你说的所有话都必须用一种特定的方式来表达。虽然人声是相同的,但每个辅音发音时都必须加上“o”,然后再加上辅音 也就是说,“L”将是“LOL”,“星期五”将是 “FOFRORIDODAY”和“BALL”将是“BOBALOLLOL” 我写了一些看起来很愚蠢的代码,但它完成了它的工作 let myWord (x:string) = x.Replace("q","qoq

我正在玩弄F#语法

在瑞典,我们有一款名为“Backslang”的游戏(谷歌从“Rövarspråk”翻译过来) 规则很简单。你说的所有话都必须用一种特定的方式来表达。虽然人声是相同的,但每个辅音发音时都必须加上“o”,然后再加上辅音

也就是说,“L”将是“LOL”“星期五”将是 “FOFRORIDODAY”“BALL”将是“BOBALOLLOL”

我写了一些看起来很愚蠢的代码,但它完成了它的工作

let myWord (x:string) = 
    x.Replace("q","qoq").Replace("w","wow").Replace("r","ror").Replace("t","tot").Replace("p","pop").Replace("s","sos").Replace("d","dod").Replace("f","fof").Replace("g","gog").Replace("h","hoh").Replace("j","joj").Replace("k","kok").Replace("l","lol").Replace("z","zoz").Replace("x","xox").Replace("c","coc").Replace("v","vov").Replace("b","bob").Replace("n","non").Replace("m","mom").Replace("Q","QOQ").Replace("W","WOW").Replace("R","ROR").Replace("T","TOT").Replace("P","POP").Replace("S","SOS").Replace("D","DOD").Replace("F","FOF").Replace("G","GOG").Replace("H","HOH").Replace("J","JOJ").Replace("K","KOK").Replace("L","LOL").Replace("Z","ZOZ").Replace("X","XOX").Replace("C","COC").Replace("V","VOV").Replace("B","Bob").Replace("N","Non").Replace("M","Mom").ToLower()   

    myWord "ball"
F#交互式:val-it:string=“bobalollo”

为了可读性,有没有办法让这段代码看起来更好


我是F#和函数式编程的新手,欢迎提供任何建议、建议和建议

可能是这样的:

let isVowel = function
  | 'a' | 'e' | 'i' | 'o' | 'u' | 'y' | 'å' | 'ä' | 'ö'
  | 'A' | 'E' | 'I' | 'O' | 'U' | 'Y' | 'Å' | 'Ä' | 'Ö' -> true
  | _ -> false

let lollify s =
  [| for c in s do if isVowel c then yield c else yield c; yield 'o';yield c |]
  |> System.String

[<EntryPoint>]
let main argv = 
  printfn "%A" <| lollify "Ball"
  0

将函数应用于字符串的每个字符。

我发现第二个选项比第一个选项更可读,即使它更长+
isVocal
的实现演示了F#如何使一个人能够以清晰易读的方式编写能够传达其功能的代码。伟大的代码布局!不过,我会称之为
是元音
)如果您将它与FuleSnabel的
is元音
函数相结合,它将是世界上最好的两个函数,依我看:
String.collect(当is元音c->String c | c->sprintf“%co%c”c时函数c)
这个解决方案非常简洁!我非常喜欢它。还修复了一个小问题,大写辅音将再次显示为大写。i、 e.当球输出博巴洛尔时,现在读博巴洛尔<代码>|辅音->辅音+“o”+辅音.ToLower())
let lollify s =
  s
  |> Seq.map (fun c -> if isVowel c then [|c|] else [|c;'o';c|])
  |> Seq.collect id
  |> Seq.toArray
  |> System.String
String.collect (string >> function
    | vowel when "aeiouyåäöAEIOUYÅÄÖ".Contains vowel -> vowel
    | consonant -> consonant + "o" + consonant )