適用ファンクターでの条件付きループ

MathematicalOrchid

それParser xがを解析するパーサーであると仮定しxます。このパーサーはおそらくmany、ゼロ個以上の何かの発生を解析する(アイテムパーサーが失敗すると停止する)コンビネーターを持っています。

Parserモナドを形成する場合それをどのように実装できるかがわかりますParserApplicative Functorだけの場合、その方法がわかりません前の結果を確認して次に何をするかを決定する方法はないようです(正確にはモナドが追加する概念)。何が足りないのですか?

Aadit m shah

Alternative型クラスは提供しmanyコンビネータを:

class Applicative f => Alternative f where
    empty :: f a
    (<|>) :: f a -> f a -> f a
    many  :: f a -> f [a]
    some  :: f a -> f [a]

    some = some'
    many = many'

many' a = some' a <|> pure []
some' a = (:) <$> a <*> many' a
  1. many aコンビネータ手段「ゼロ個以上」a
  2. some aコンビネータ手段「1つ以上」a

したがって:

  1. some aコンビネータは、1のリストを返すaに続いてmany a(つまり1 + (0 or more))。
  2. many aコンビネータリターンのいずれかsome aまたは空のリスト(すなわち(1 or more) | 0)。

manyコンビネータは依存(<|>)JavaScriptのような言語でのデフォルトの演算子とみなすことができる演算子。たとえば、次のAlternativeインスタンスについて考えてみますMaybe

instance Alternative Maybe where
    empty = Nothing
    Nothing <|> r = r
    l       <|> _ = l

基本的に、(<|>)それが真実である場合、は左側の値を返す必要があります。それ以外の場合は、右側の値を返す必要があります。

AParserは、次のように定義されたデータ構造ですMaybeApplicativeレクサーコンビネーターとパーサーコンビネーターの考え方は基本的に同じです)。

data Lexer a = Fail | Ok (Maybe a) (Vec (Lexer a))

解析が失敗した場合、Fail値が返されます。それ以外のOk場合は値が返されます。以来Fail <|> pure []IS pure []、これはどのようにmany停止し、空のリストを返すようにする場合コンビネータが知っています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

デフォルトのコンストラクターを条件付きで明示的に適用するにはどうすればよいですか?

分類Dev

グループ化されたデータへの条件付きの適用

分類Dev

条件付きでjinja2フィルターを適用します

分類Dev

JSON配列で一意の値を取得するための条件付きフィルターの適用

分類Dev

ファンクターを部分的に適用できますか

分類Dev

spaCyのプレフィックスで分割されたトークンにカスタムトークンルールを適用できますか?

分類Dev

Angular:リアクティブフォームにバリデーターを条件付きで適用する方法

分類Dev

データフレームの複数の列に適用される条件付きIfステートメント

分類Dev

ng-repeatでangualrjsカスタムフィルターを条件付きで適用します

分類Dev

Reshape2のデータフレームへの条件付き適用

分類Dev

Rのデータフレーム内の特定の行に条件付きでmutate_atを適用する

分類Dev

NuGetファイルタグのオプションまたは条件付きフォルダー?

分類Dev

データフレーム内のグループに条件付きサマリーを繰り返し適用する

分類Dev

複数の用語を含むNEST条件付きフィルタークエリ

分類Dev

Reactのコンポーネントに条件付きスタイルを適用する-インラインCSS

分類Dev

条件付きのグループ化されたデータに.mean()を適用する

分類Dev

条件付きCOUNTIFをパンダのデータフレームに適用するとNaNになります

分類Dev

複数の条件付きレベルのグループ化を適用する

分類Dev

makefileのマクロ?条件付きhファイルインクルード?

分類Dev

アクティブなタブにスタイルカラーを条件付きで適用する方法

分類Dev

Azure DevOpsビルドパイプラインの「アーティファクトの公開」タスクでアーティファクト名を条件付きで設定することは可能ですか?

分類Dev

条件付き書式を使用してフィルターボックスを適用する

分類Dev

パンダのデータフレーム行の条件付きループ

分類Dev

条件付きのパンダデータフレームのグループ化

分類Dev

reactjsのパブリックhtmlファイルで条件付き外部スクリプト参照を作成するにはどうすればよいですか?つまり、1つは本番用、もう1つはステージング用です。

分類Dev

条件付きでフィルターを適用するdplyr関数を探しています

分類Dev

AWK-forループと条件付きチェックで複数のファイルを処理する

分類Dev

DataFrameGroupByのグループ全体の条件付きフィルター

分類Dev

ファンタジーフットボールのPythonPuLP最適化問題、特定の条件付き制約を追加する方法は?

Related 関連記事

  1. 1

    デフォルトのコンストラクターを条件付きで明示的に適用するにはどうすればよいですか?

  2. 2

    グループ化されたデータへの条件付きの適用

  3. 3

    条件付きでjinja2フィルターを適用します

  4. 4

    JSON配列で一意の値を取得するための条件付きフィルターの適用

  5. 5

    ファンクターを部分的に適用できますか

  6. 6

    spaCyのプレフィックスで分割されたトークンにカスタムトークンルールを適用できますか?

  7. 7

    Angular:リアクティブフォームにバリデーターを条件付きで適用する方法

  8. 8

    データフレームの複数の列に適用される条件付きIfステートメント

  9. 9

    ng-repeatでangualrjsカスタムフィルターを条件付きで適用します

  10. 10

    Reshape2のデータフレームへの条件付き適用

  11. 11

    Rのデータフレーム内の特定の行に条件付きでmutate_atを適用する

  12. 12

    NuGetファイルタグのオプションまたは条件付きフォルダー?

  13. 13

    データフレーム内のグループに条件付きサマリーを繰り返し適用する

  14. 14

    複数の用語を含むNEST条件付きフィルタークエリ

  15. 15

    Reactのコンポーネントに条件付きスタイルを適用する-インラインCSS

  16. 16

    条件付きのグループ化されたデータに.mean()を適用する

  17. 17

    条件付きCOUNTIFをパンダのデータフレームに適用するとNaNになります

  18. 18

    複数の条件付きレベルのグループ化を適用する

  19. 19

    makefileのマクロ?条件付きhファイルインクルード?

  20. 20

    アクティブなタブにスタイルカラーを条件付きで適用する方法

  21. 21

    Azure DevOpsビルドパイプラインの「アーティファクトの公開」タスクでアーティファクト名を条件付きで設定することは可能ですか?

  22. 22

    条件付き書式を使用してフィルターボックスを適用する

  23. 23

    パンダのデータフレーム行の条件付きループ

  24. 24

    条件付きのパンダデータフレームのグループ化

  25. 25

    reactjsのパブリックhtmlファイルで条件付き外部スクリプト参照を作成するにはどうすればよいですか?つまり、1つは本番用、もう1つはステージング用です。

  26. 26

    条件付きでフィルターを適用するdplyr関数を探しています

  27. 27

    AWK-forループと条件付きチェックで複数のファイルを処理する

  28. 28

    DataFrameGroupByのグループ全体の条件付きフィルター

  29. 29

    ファンタジーフットボールのPythonPuLP最適化問題、特定の条件付き制約を追加する方法は?

ホットタグ

アーカイブ