ようこそ。睡眠不足なプログラマのチラ裏です。

俄仕込みのF#でケブンッリジ関数。パイプ演算子って直感的で素敵だよね。

前回のC#版に続きまして、息抜きを兼ねて俄仕込みのF#でケブンッリジ関数を書きました。

#light
open System
open System.Text.RegularExpressions

let str = @"こんにちは みなさん おげんき ですか? わたしは げんき です。
この ぶんしょう は いぎりす の ケンブリッジ だいがく の けんきゅう の けっか
にんげん は もじ を にんしき する とき その さいしょ と さいご の もじさえ あっていれば
じゅんばん は めちゃくちゃ でも ちゃんと よめる という けんきゅう に もとづいて
わざと もじの じゅんばん を いれかえて あります。
どうです? ちゃんと よめちゃう でしょ?
ちゃんと よめたら はんのう よろしく"

let cmabrigde (s : string) =
    let rand = new Random()
    let rec convert (s : string) = 
        let shuffle = s |> Seq.sort_by (ignore >> rand.Next) |> Seq.to_array
        if s.Length <= 1 then s.ToCharArray()
        elif s.ToCharArray() <> shuffle then shuffle else convert s 
    Regex.Replace(s, @"(?<=\w)\w{2,}(?=\w)", fun (m : Match) -> new string(m.Value |> convert))

str |> cmabrigde |> printfn "%s"
Console.ReadKey()


初心者のため、F#のことはあまりよくわかっていませんが、
とりあえずパイプ演算子って直感的で素敵だよね!、と。


C#にも欲しいなあこれ。