問題タブ [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.
scala - Monoid[String] は本当に scala の Monoid ですか?
私は現在、scalaの圏論について学んでおり、結合性の法則は次のように言っています
(x + y) + z = x + (y + z)
2 つ以上の値を扱う場合は問題ありません
その場合、順序は関係ありません。しかし、値が 2 つしかない場合はどうでしょう。数値の場合はまだ機能していますが(可換)、文字列で同じことを行うと失敗します。
では、結合性がモノイド法則を満たすために交換性を必要とすると言うのは合法でしょうか? とにかく、文字列モノイドは有効ですか?
generics - モノイドで使用するための一般的な String.Zero および bool.Zero の取得または実装
既存のコードをよりモノディックなアプローチにリファクタリングしようとしています。既存のコードには、 や などのインターフェイスと数値が含まれていIXInterface
ます。数値はデフォルトですでに持っており、インターフェイスにはプロパティ gettor としてそれがありますが、そうではありません。1 つの方法は bool と string をインターフェイスでラップすることですが、これは面倒です。int
bool
Zero
bool
string
私は、F# 言語が数値の型を拡張できるかどうかを考えました。おそらく、特定の状況では、文字列とブール値の型も拡張できるでしょう。
上記は、文字列またはブール値で使用しない限り、正常にコンパイルされます。
エラーは明確で正しいです(明らかな理由で認識されない拡張メソッドがあります)、それを取り除くための邪魔にならない方法がわかりません:
「型 bool は演算子 'get_Zero' をサポートしていません」
で失敗します 「型文字列は演算子 'get_Zero' をサポートしていません」で失敗します
haskell - Const Monoid の適用可能な実装
<*>
タイプチェックの定義がどのようにできるのかわかりません。
左側は Applicative の定義のようにf
の署名によって制約されます<*>
名前を現在の状況に変更した後:
=> f :: m -> *
.
左側f
は の [最初の] パラメータですmappend
。
モノイドの定義より
名前を現在の状況に変更した後:
=> f :: m
.
scala - scalaz を使用した単純な集約?
これが私の単純な集計の実装です。
scalaz を使用したよりスマートな実装はありますか?
haskell - 要素のインデックスを見つけるための一般的なアプローチ
基本ライブラリにいくつかの大きな変更があったので、今日の慣用的な解決策にはfmap
、Maybe
、Monoid
、およびおそらく他のクラスFirst
が含まれるかどうか疑問に思っています。Foldable
、、およびfold
の複雑な構造が必要になると考えましたMonoid
が、これらのものを一緒に構成する明確な方法を見つけることができませんでした。zip [1..]
First
a -> Bool
Maybe
また、このコードのほとんどはライブラリにあると思われます。newtype
必要な構造を取得するためにクラスを構成する必要があるかどうか (またはいくつ) のラッパーが必要かどうかはわかりません。
monads - モナド: 同一性が重要なのはなぜですか? セットにそのような特別なメンバーがいない場合はどうなりますか?
私は の概念を学ぼうとしています。monad
この優れたビデオBrian Beckend がモナドとは何かを説明しようとしているのを見ています。
彼が について話すときmonoid
、それは型のコレクションであり、構成の規則があり、この構成は 2 つの規則に従わなければなりません。
- 連想:
x @ (y @ z ) = (x @ y) @ z
- コレクションの特別なメンバー:
x @ id = x and id @ x = x
@
構成を表す記号を使用しています。id
特別会員を意味します。
2番目のポイントは、私が理解しようとしていることです。なぜこれが重要なのですか?そんなスペシャルメンバーがいなかったら?
新しい概念を学ぶとき、私は常にこれらの抽象的な概念を他の具体的なものに関連付けようとします。そうすることで、それらを完全に理解し、暗記できるようになります。
だから私が関連付けようとしmonad
ているのmonoid
はlego
. したがって、レゴ セット内のすべてのビルディング ブロックがコレクションを形成します。合成ルールは、それらを新しい形のビルディングブロックに合成します。そして、構成が最初のルールである連想に従っていることは明らかです。しかし、他のビルディングブロックと合成して同じものを取り戻すことができる特別なビルディングブロックはありません. したがって、2 番目のルールには従いません。
しかし、レゴは依然として高度に構成可能です。レゴが 2 番目のルールに従わなかった場合、何が欠けていたり、欠けていたりしますか? 結果は何ですか?または、これらすべてのルールに従う
他のものと比較して、このように言えます. monoid
他のmonoid
レゴにはない機能は何ですか?
haskell - mempty が左引数か右引数かによって異なる定義を持つ mempty ですか?
次のデータ型とセミグループ インスタンスがあります。
上記の型のモノイド インスタンスを作成したいのですが、その方法がわかりません。次の定義を使用する場合
への入力のすべてのペアで機能しますが<>
、私がいるものを除きます。mappend
に評価されmempty
ます。
mempty
が有効になるようにこれを修正するにはどうすればよいですか? memptyが左か右かによって決まるため、新しい構文や概念がないとできないようです...
haskell - モノイド写像の自動伝搬
次のように定義されたモノイドがあるとしましょう。
totalQuantityとorderTotalは両方とも数値であるため、 (+)の下でモノイドも形成 します。定義する方法はありますか?
そのため、次のようなものを手動で定義する代わりに、各フィールドでmappend呼び出しを伝播することはできますか?
algorithm - モノイド/半群のすべての中置積の計算
はじめに: グループのインフィックス製品
グループがあるとします
および要素のリスト
私たちの目標が機能を実装することである場合
そのような
i
(そして>の場合に何が起こるかは気にしませんj
)
次に、プレフィックスのテーブルを事前に計算することでそれを行うことができます
(1
右側は の単位を示しますG
)、次に次のように実装f
します
これは次の理由で機能します。
など
十分な再結合の後。
私の質問
G が群ではなくモノイドにすぎない場合、この考えを救うことができるでしょうか。
私の特定の問題について、ifG = ([0, 1] ⊂ ℝ, *)
、つまり、単位線からの実数があり、0で割ることができない場合に同様のことを行うことはできますか?