問題タブ [monoids]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - プログラミングにおけるモノイド/半群の例
モノイドがプログラミングで驚くほど遍在していることはよく知られています。それらは非常に遍在し、非常に便利なので、私は「趣味のプロジェクト」として、それらの特性 (分散データ集約) に完全に基づいたシステムに取り組んでいます。システムを便利にするためには、便利なモノイドが必要です :)
私はすでにこれらを知っています:
- 数値または行列の合計
- 数値または行列積
- 最上位要素または最下位要素を含む全次数の下での最小値または最大値 (より一般的には、有界格子での結合または会合、またはさらに一般的には、カテゴリ内の積または共積)
- セットユニオン
- モノイドを使用して競合する値が結合される写像結合
- 有限集合の部分集合の交点 (半群について言えば集合交点)
- 境界のあるキー ドメインとのマップの交差 (ここでも同じ)
- ソートされたシーケンスのマージ。おそらく、異なるモノイド/セミグループでキーが等しい値を結合します
- ソートされたリストの制限付きマージ (上記と同じですが、結果の上位 N を取得します)
- 2 つのモノイドまたは半群のデカルト積
- リスト連結
- 自己同形組成物。
ここで、操作の準プロパティを同値関係を維持するプロパティとして定義しましょう。たとえば、同じ長さのリスト、または順列まで同一の内容を持つリストを同等と見なす場合、リストの連結は準交換可能です。
いくつかの準モノイドと準可換モノイドと半群があります:
- 任意 (a+b = a または b、キャリア セットのすべての要素が同等であると見なす場合)
- 満足する述語 (a+b = a と b のうち、null ではなく、何らかの述語 P を満たすもの。述語がない場合は null; すべての要素が P の等価性を満たすと見なす場合)
- ランダム サンプルの限定された混合 (xs+ys = xs と ys の連結からのサイズ N のランダム サンプル。データセット全体と同じ分布を持つ任意の 2 つのサンプルが同等であると見なす場合)
- 重み付けされたランダム サンプルの有界混合
- これを「トポロジー マージ」と呼びましょう。2 つの非循環的で矛盾のない依存関係グラフが与えられた場合、両方で指定されたすべての依存関係を含むグラフです。たとえば、各リストの要素が順番に続く順列を生成する「連結」リスト (たとえば、123+456=142356)。
他にどのような存在がありますか?
haskell - モナドライターmとどちらかeは断固として二重ですか?
Writer m
とEither e
モナドの間には二重の関係があることに気づきました。mがモノイドの場合、
モナドを形成するために使用できます:
()のデュアルはボイド(空のタイプ)であり、製品のデュアルは余積です。すべてのタイプeに「コモノイド」構造を与えることができます。
明白な方法で。今、
これがEither e
モナドです。矢印はまったく同じパターンに従います。
質問:与えられたモノイドに応じて、Either e
およびの両方を実行できる単一のジェネリックコードを作成することは可能ですか?Writer m
haskell - モナドはエンドファンクターの範疇にあるモノイドにすぎませんが、何が問題なのですか?
次の言葉を最初に言ったのは誰?
モナドはエンドファンクターの範疇にあるモノイドにすぎませんが、何が問題なのですか?
それほど重要ではありませんが、これは本当ですか? もしそうなら、説明をしてもらえますか?
haskell - Haskell で Maybe を使って最大モノイドを書く
私はHaskell モノイドとその使用法を調べてきました。これにより、モノイドの基本についてかなりよく理解できました。ブログ投稿で紹介されているものの 1 つは Any モノイドで、次のような使い方です。
同様に、私は最大モノイドを構築しようとしてきましたが、次のようになりました。
特定の型の Maximum モノイドを構築することは非常に簡単です。たとえば、Num などは非常に簡単ですが、何にでも役立つようにしたいと考えています (その Any が Ord のインスタンスであるという明らかな要件があります)。
この時点で私のコードはコンパイルされますが、それだけです。実行しようとすると、次のようになります。
これが私が間違って呼んでいるのか、モノイドが間違っているのか、あるいはその両方なのかはわかりません。私がどこで間違っているかについてのガイダンスをいただければ幸いです(私は言語に非常に慣れていないため、論理エラーと非慣用的なHaskellの使用の両方に関して)。
- 編集 -
ポール・ジョンソンは、以下のコメントで、メイビーを除外することを提案しました。私の最初の試みは次のようになります。
しかし、 a の mempty 値がどうあるべきかを知らずに mempty を表現する方法がわかりません。これをどのように一般化できますか?
haskell - 「ユニット」クラスはありますか?役に立ちますか?
単一の単位値を持つタイプ(ここで正しい用語がわからない)、つまり事前定義された値を持つタイプのクラスはありますか?
...すべてのモノイド、MonadPlusなど。
クラスの別の名前は。かもしれないと思いますDefault
。これは私にとって最近2回役に立ちました。
おそらく説得力のない例:
これは存在しますか?他の人はそれが役に立つかもしれないと思いますか?
haskell - モナド、モノイド、ファンクター、矢印を実際に使用する
私は最近、モナドやモノイドなど、関数型プログラミングのさまざまな側面に役立つリソースについてこの投稿に出くわしました。
しかし、問題は、平均的なプログラマーがそのような概念からどのような用途を利用できるかということです。私はしばしばそれらの問題についての「学術的」研究に出くわします。しかし、実際に(実際のプロジェクトで)それらを使用している人に会ったことはありません。
だから問題は-Haskellで実際にそのようなものを利用する広く使われているオープンソースプロジェクトはありますか?そのようなプロジェクトは、「アカデミック」ソフトウェアではなく、「プロダクション」ソフトウェアでこの概念の実際の必要性を示しています。ただ楽しみのために」。次のようなリストを作成するのはクールです。
- モナド-AやBのようなプロジェクトで使用されます。そうしないと、そのようなコードははるかに複雑に見えるためです。
- モノイドについても同じです。
- ファンクターについても同じです。
- 矢印についても同じです。
scala - Scala PartialFunction はモノイドにできますか?
PartialFunctionはMonoidにできると思いました。私の思考プロセスは正しいですか?例えば、
ただし、現在のバージョンの Scalaz(6.0.4) には含まれていません。含まれていない理由はありますか?
scala - 任意のモノイドを使用して値をキーでグループ化する
mergeKeys
キーで値をグループ化するメソッドを書きたいと思いIterable[(K, V)]
ます。たとえば、次のように書くことができます。
Monoid
ただし、のメソッドを記述する代わりに、any を使用できるようにしたいと考えていList
ます。たとえば、値が整数である可能性があり、それらをリストに追加する代わりに合計したいとします。または(String, Int)
、セット内の文字列を蓄積したいが整数を追加したいタプルである可能性があります。どうすればそのようなメソッドを書くことができますか? または、これを行うために scalaz で使用できるものは他にありますか?
更新: 思ったほど遠くありませんでした。私は少し近づいたが、値がタプルである場合にそれを機能させる方法はまだわからない。さらに別の暗黙的な変換を記述する必要がありますか? つまり、型パラメーターの数ごとに 1 つの暗黙的な変換ですか?
scala - Scalaのモノイドとモナド
私は最近、モナドとモノイドの違いに関する良い情報源を見つけようとしました。
誰かがこれに関する優れたリソースへのリンクを提供したり、類似点/相違点について詳しく説明したりできますか?
haskell - 型クラスMonadPlus、Alternative、Monoidの違いは?
標準ライブラリのHaskell型クラス、、、MonadPlus
およびAlternative
それぞれMonoid
は、本質的に同じセマンティクスを持つ2つのメソッドを提供します。
- 空の値:
mzero
、、、empty
またはmempty
。 a -> a -> a
タイプクラスの値を結合する演算子:mplus
、、、<|>
またはmappend
。
3つすべてが、インスタンスが準拠する必要があるこれらの法則を指定します。
したがって、3つの型クラスはすべて同じメソッドを提供しているようです。
(Alternative
とも提供some
しmany
ますが、通常はデフォルトの定義で十分なので、この質問に関してはそれほど重要ではありません。)
だから、私の質問は:なぜこれらの3つの非常に似たクラスがあるのですか?スーパークラスの制約が異なること以外に、それらの間に実際の違いはありますか?