問題タブ [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.

0 投票する
1 に答える
973 参照

clojure - Clojureでモノイドプロトコルを書くには?

明らかな理由により、以下は機能しません。

mzero引数がゼロであり、引数がゼロのメソッドはプロトコルでは許可されていません (または意味がありません)。ディスパッチが値ベースではなく型ベースである Haskell または Scala では、これは問題になりません。

MonoidClojure でプロトコルを概念化して記述する正しい方法は何でしょうか?

0 投票する
1 に答える
893 参照

scala - 内部にモノイドと関数を持つタプルのアプリケーションインスタンス

私は以前に出会ったhaskellの例をscalazに変換しようとしていました。元の例は次のとおりです。

私が理解できる限り、これはこのインスタンスを使用します。

文字通りscalazに変換されません:

しかし、私はインスタンスを探しました、そしてそれはそこにあるようです(私が理解できる限り、再び)。

それで、問題は、なぜそれがこのように機能しないのかということです。または、何を見逃したか、正しく取得できませんでしたか?

0 投票する
4 に答える
1883 参照

haskell - Haskell: 重複した関数 (+) と (++)、mappend

(+)とは;(++)の単なる特殊化です。mappend私は正しいですか?なぜ必要なのですか?Haskell にはこれらの強力な型クラスと型推論があるため、これは無駄な重複です。視覚的な利便性とタイピングの向上のために、削除(+)(++)て名前を変更するとしましょう。mappend (+)コーディングは、初心者にとってより直感的で、短く、理解しやすいものになります。

(それは私に夢を与えます。)Haskell のような抽象化を主張する美しい言語にとって、3 つ、あるいはそれ以上の関数が同じことを行うのは良いことではありません。モナドでもfmap同じ種類の繰り返しを見た. Haskell 委員会はこれについて何か計画を立てていますか? それはいくつかのコードを壊すだろうが、確かではないが、大きな変更を加えた次のバージョンがあると聞いた.これは素晴らしい機会だ. 残念すぎる… せめてフォークくらいは買えるの?map(.)liftMmapMforMfmap

編集(*)私が読んだ回答では、数字の場合、または(+)に収まる可能性が あるという事実がありますmappend。実際、それは!(*)の一部であるべきだと思います。Monoid見て:

現在、関数memptyと を忘れて、mconcatしかありませんmappend

しかし、私たちはそれを行うことができます:

次のように動作します (おそらく、まだ十分に理解していません)。

実際には、'mmultiply' は 'mappend' に関してのみ定義されるため、インスタンスのMonoid場合は再定義する必要はありません! 次にMonoid、数学に近づきます。クラスに(-)andを追加することもできます。これが機能する場合、関数の重複と同様に and のケースも解決すると思います:に(/)なり、new is just . 基本的に、「プルアップ」を使用してコードをリファクタリングすることをお勧めします。ああ、新しいforも必要です。これらの演算子をクラスで抽象化し、次のように定義できます。SumProductmappend(+)mmultiply(*)mempty(*)MonoidOperatorMonoid

これを行う方法はまだわかりませんが、これらすべてに対するクールな解決策があると思います。

0 投票する
2 に答える
2527 参照

haskell - なぜGHCはMonoidのインスタンスを導出できないのですか?

DeriveFunctorGHC には などのいくつかの言語フラグがありDeriveDataTypeable、Haskell 98 で許可されている型クラス以外の型クラスの派生インスタンスをコンパイラで生成できますFunctor。自然な」派生インスタンス。

では、なぜMonoidですか?単一のデータ コンストラクターを持つ任意のデータ型のようです。

インスタンスを機械的に生成できMonoidます(疑似コードを許してください):

派生パッケージがこれを提供していることは承知していますが、特に私の質問は、GHC が提供しない理由があるかどうかです。

0 投票する
2 に答える
1699 参照

parsing - モノイド構文解析 -- それは何ですか?

Edward Kmettによる「Introduction to Monoids」という名前のスライドから、モノイド解析という用語を偶然見つけました。スライド全体で haskell を使用しています。

今、この用語を検索すると、同じ著者からの言及がほとんどなく、ほとんどの言及しか見つかりませんでした。したがって、この用語はここで説明できると思います。

では、モノイド構文解析は興味深い新しいものですか? リンク先のスライド以外のどこかに表示されていますか? そして最も重要なことは、それは何ですか?スライド自体は、定義を与えたり、強調したりするようには見えませんでした。

0 投票する
5 に答える
1104 参照

haskell - パターンマッチングにおけるモノイド空虚

maximumのような一般化された関数を作成しようとしましたPrelude。私の最初の素朴なアプローチは次のようになりました。
maximum' :: (F.Foldable a, Ord b) => a b -> Maybe b
maximum' mempty = Nothing
maximum' xs = Just $ F.foldl1 max xs

ただし、テストするとNothing、入力に関係なく常に返されます。
> maximum' [1,2,3]
> Nothing

モノイド型インスタンスの空の値を取得することは可能でしょうか。私が書いたテスト関数は正しく動作します:
getMempty :: (Monoid a) => a -> a
getMempty _ = mempty

> getMempty [1,2,3]
> []

私はすでにこれらの2つの質問を見ていましたが、答えが私の問題をどのように解決するかわかりませんでした:
Write a Maximum Monoid using Maybe in Haskell
Haskell Pattern Matching on the Empty Set

maximum'関数を機能させるにはどうすれば書き直せますか?

0 投票する
3 に答える
454 参照

haskell - 空でないモノイドの選択

空でないモノイドを選択する関数が必要です。リストの場合、これは次の動作を意味します。

今、私は実際にそれを実装しましたが、一種の一般的なケースのように見えるため、標準的な代替手段が存在するかどうか疑問に思っています. 残念ながら、Hoogle は役に立ちません。

これが私の実装です:

0 投票する
1 に答える
293 参照

haskell - 大きなリストに対するモノイドフォールドのスタックオーバーフロー

最初のいくつかimports

値のペアを保持しているファンクターがあるとしましょう。

私はこれらの大きなリストを持っています、

その上で、たとえば平均を計算したい

これのいくつかの潜在的な実装は次のとおりです。

残念ながら、これらはすべてスタックオーバーフローを引き起こします。

問題はで過度の怠惰である可能性があると考えてFoldable.foldMap、より厳密なバリアントを実装してみました、

残念ながら、これもオーバーフローします。

アプローチのクリーンな構造を妥協することなく、これをどのように達成できますか?

アップデート

Fret厳密なフィールドを作成すると、期待どおりに機能しているように見えます。これがより大きなアプリケーションで機能するかどうかを確認します。

0 投票する
1 に答える
1837 参照

haskell - Haskellでこのツリーのモノイドインターフェースをどのように実装しますか?

用語をご容赦ください、私の心はまだ曲がっています。

ツリー:

いくつかの質問を聞きたいんです:

  1. Ftreeであることができなかった場合、ID 値がないため、Emptyもはや ではありません。Monoid

  2. mappendこのツリーをどのように実装しますか? 勝手に 2 本の木を無造作に接ぎ木できますか?

  3. 二分探索ツリーの場合、結果mappendが依然として BST であることを確認するために、両方のツリーの要素の一部をイントロスペクトする必要がありますか?

記録のために、ここで他のいくつかのことFtreeができます: