Yuji Yamamoto (山本悠滋)
2019-10-18 Regex Festa
Applicative
やAlternative
という型クラスのメソッドが中心なので慣れていればわかりやすいマッチさせるのに使う関数(他にもある)
RE s a
型の値と、対象の文字列
[s]
型の値を受け取ってマッチした結果を返す
ただの文字: sym
連接: *>
・string
選択: <|>
繰り返し: many
・some
many
、1回以上がsome
オプショナルなマッチ: optional
マッチした結果をHaskellの値に割り当て
マッチした結果をHaskellの値に割り当て、さらに計算!
<$>
:
左辺に渡した関数を、右辺に渡した正規表現でマッチした結果に渡すもうちょっと複雑な例: まずは部品作り
<$>
や<*>
でOrigin
関数一つ一つの引数に割り当てる<|>
とpure
を使うとマッチに失敗した場合のデフォルト値を指定できる
pure
:
空文字列にしかマッチしないけど値は返す正規表現を作るもうちょっと複雑な例: まずは部品作り(続き)
もうちょっと複雑な例: 使ってみる
マッチ結果の構造体への割り当て: まずは構造体の定義
String
以外の文字列にはマッチできない…
※正規表現技術入門 p. 56より
😕どちらでもなさそう?
s -> [Thread s r]
の実行が成功したとき
[Thread s r]
の要素をすべてキューに追加して、引き続き実行するs -> [Thread s r]
の実行が失敗したとき
Thread
に切り替えるThread
を一つずつ実行してみて、結果が条件に合うものを選ぶ、といった方が近い
findLongestPrefix
関数などはそうした処理特性によって実現Applicative
ベースのAPIなので、ぱっと見よく似てる