Have you ever wanted to do case expr of regexhere -> ... ? You can do almost that with view patterns! {-# LANGUAGE ViewPatterns #-} import Text.Regex.Posix -- Helper pat :: String -> String -> [[String]] pat p s = s =~ p -- Function with matching foo :: String -> String foo (pat "foo(bar|baz)" -> [[_,x]]) = x foo _ = "no!" main :: IO () main = do print $ foo "foobar" print $ foo "foobaz" print $ f
効率的なファイル操作、正規表現、ファイル名マッチング (2012/02/18 リンク切れ) 翻訳していただきありがとうございます。 (=~) の型はすごいことになっている。target を指定してtarget型の値を返す。 Prelude> :module +Text.Regex.Posix Prelude Text.Regex.Posix> :t (=~) (=~) :: (Text.Regex.Base.RegexLike.RegexMaker Regex CompOption ExecOption source, Text.Regex.Base.RegexLike.RegexContext Regex source1 target) => source1 -> source -> target Bool 型を指定するとBool 型を返す > "my left foot" =~ "fo
最近ローソンでお菓子をたくさん買った田中です。 近頃読んで面白かった論文を紹介したいと思います。 A Play on Regular Expression 今年のICFPでFunctional Pearlとして発表されたものです。ICFP(International Conference on Functional Programming)というのは、関数プログラミングに関する国際学会で、Functional Pearlというのは、エレガントでためになる、関数プログラミングのテクニック集です。 この論文ではまず、正規表現マッチャを関数型言語(Haskell)でいかにエレガントに記述できるかが示されます。それから、エレガントさを保ったままの線形時間実装へ改良し、その実装がC++によるプロフェッショナルな実装(具体的にはGoogle re2)に匹敵するパフォーマンスを示すことが示されます。さら
■ [Haskell] 正規表現のパーサーをApplicativeで(おまけ) せっかくパースしたのでマッチも。 とりあえずNFAに変換します。NFAの各ステートは、入力文字列から次のステートと残りの入力への関数と考えられます。 data NFAState a = NFAState { runNFA :: [a] -> [(NFAState a, [a])] } | NFAEndState compile :: Regex -> NFAState Char compile (Regex branch) = compileBranch NFAEndState branch compileBranch :: NFAState Char -> Branch -> NFAState Char compileBranch next branch = NFAState $ newState where
■ [Haskell] 正規表現のパーサーをApplicativeで だいぶ昔にパーサーモナドの勉強のために書いた正規表現のパーサーをApplicativeを使って書き直してみました。 import Control.Applicative import Control.Arrow (first) import Prelude hiding (seq) newtype Parser input output = Parser { runParser :: input -> Maybe (output, input) } instance Functor (Parser input) where fmap f parser = Parser $ \i -> first f <$> runParser parser i instance Applicative (Parser input) wh
まずは、Audrey さんが言った Haskell の殺し文句を思い出して頂きたい。 正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。 15分というのは誇張が入っていると思うが、正規表現が保守しにくく、Haskell の Parsec は強力で保守し易いのは事実だ。その理由を Perl と Haskell のコードを示しながら説明してみたいと思う。 Perl を愛する方に:この記事は Perl を攻撃するために書いたのではない。Perl を選んだのは、正規表現を広めた言語であり、僕がそれなりに Perl のコードを書けるためである。この記事の目的は、正規表現よりも関数型パーサー(Parsec)の方が優れていると示すことだ。 例題 この記事では例題として、IPv4 アドレスを解析する関数を書く
以前試したように Haskell において正規表現を使いたい場合は、Text.Regex モジュールを利用する。(cf. Haskell で正規表現) 流れとしては、 「正規表現型の値」を生成 : mkRegex (1) を利用して一致する部分があるか確かめる : matchRegex import Text.Regex main = do print $ matchRegex (mkRegex "(piyo)") "123hogepiyofuga" print $ matchRegexAll (mkRegex "(piyo)") "123hogepiyofuga" 結果は、 Just ["piyo"] Just ("123hoge","piyo","fuga",["piyo"]) ただし、matchRegex において Just で包んで返される値は、 mkRegex の正規表現で s
ネイルで使う材料で、DIY時の木割れやネジ跡を派手にしたらかわいい OSB合板でちょっとしたボックスをつくりました。 ビス止め下手すぎて木を割ったり穴あけすぎたりした場所に、好きな派手色の樹脂を詰めてパテ代わりにしてみました。 ちょっと某HAYっぽみ出て可愛かったので、自分用にメモです。 手順 塗装 派手色グミジェルで失敗部分…
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く