2023-01-01から1年間の記事一覧

FParsecで左再帰を試してみる

F# のパーサーコンビネーター FParsec を使って、左再帰の文法を書くとどうなるか試してみた。左再帰についての説明は Wikipedia から引用しておく。 左再帰(英: Left recursion)とは、言語(普通、形式言語について言うが、自然言語に対しても考えられ得…

F#で正規表現を使って日本語をマッチさせる

まずひらがな。 Regex.IsMatch("あ", "\p{IsHiragana}") // => true F# では .Net の Regex クラスによって正規表現を扱う。Unicodeのコードポイントの範囲ごとに IsHiragana のような名前が付けられており、その名前を \p{IsHiragana} のように指定すること…

Vimで置換・検索時のエラーを抑制する

Vim で置換や検索をした際に、パターンが見つからなかった場合は E486: Pattern not found エラーが返る。たとえばマクロはエラーが発生するとそこで停止してしまうので、エラーが返らないようにしたくなるケースもある。ということで今回はその方法について…

F#で要素数が2つ以上のリストをマッチさせる

前に書いたこの記事に関連して。 F#で要素数が1つのリストをマッチさせる 今度は要素数が2つ以上のリストにマッチさせる方法について。こちらも前回同様 Cons パターン :: を使って次のように書ける。 match some_list with | _::_::_ -> printfn "two or mo…

Vimで正規表現にマッチした文字列を置換先でも使う

Vim で置換する際に、正規表現でマッチした文字列をそのまま置換先でも使いたいという場面にちょくちょく遭遇するのでやり方を調べた。後方参照と呼ぶらしい。 (後方参照というワードを知らなかったので調べるのにちょっと苦労した) やり方 (ヘルプ) はこち…

F#で要素数が1つのリストをマッチさせる

F# で書かれているとあるコードを読んでいて、以下のようなコードが出てきてよくわからなかったので調べた。 a::[] の部分。 match some_list with | a::[] -> printfn "%A" a | b -> printfn "%A" b まず :: は Cons パターンというもので、パターンマッチ…