問題タブ [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.
clojure - Clojureでモノイドプロトコルを書くには?
明らかな理由により、以下は機能しません。
mzero
引数がゼロであり、引数がゼロのメソッドはプロトコルでは許可されていません (または意味がありません)。ディスパッチが値ベースではなく型ベースである Haskell または Scala では、これは問題になりません。
Monoid
Clojure でプロトコルを概念化して記述する正しい方法は何でしょうか?
haskell - Haskell: 重複した関数 (+) と (++)、mappend
(+)
とは;(++)
の単なる特殊化です。mappend
私は正しいですか?なぜ必要なのですか?Haskell にはこれらの強力な型クラスと型推論があるため、これは無駄な重複です。視覚的な利便性とタイピングの向上のために、削除(+)
し(++)
て名前を変更するとしましょう。mappend
(+)
コーディングは、初心者にとってより直感的で、短く、理解しやすいものになります。
(それは私に夢を与えます。)Haskell のような抽象化を主張する美しい言語にとって、3 つ、あるいはそれ以上の関数が同じことを行うのは良いことではありません。モナドでもfmap
同じ種類の繰り返しを見た. Haskell 委員会はこれについて何か計画を立てていますか? それはいくつかのコードを壊すだろうが、確かではないが、大きな変更を加えた次のバージョンがあると聞いた.これは素晴らしい機会だ. 残念すぎる… せめてフォークくらいは買えるの?map
(.)
liftM
mapM
forM
fmap
編集(*)
私が読んだ回答では、数字の場合、または(+)
に収まる可能性が
あるという事実がありますmappend
。実際、それは!(*)
の一部であるべきだと思います。Monoid
見て:
現在、関数mempty
と を忘れて、mconcat
しかありませんmappend
。
しかし、私たちはそれを行うことができます:
次のように動作します (おそらく、まだ十分に理解していません)。
実際には、'mmultiply' は 'mappend' に関してのみ定義されるため、インスタンスのMonoid
場合は再定義する必要はありません! 次にMonoid
、数学に近づきます。クラスに(-)
andを追加することもできます。これが機能する場合、関数の重複と同様に and のケースも解決すると思います:に(/)
なり、new is just . 基本的に、「プルアップ」を使用してコードをリファクタリングすることをお勧めします。ああ、新しいforも必要です。これらの演算子をクラスで抽象化し、次のように定義できます。Sum
Product
mappend
(+)
mmultiply
(*)
mempty
(*)
MonoidOperator
Monoid
これを行う方法はまだわかりませんが、これらすべてに対するクールな解決策があると思います。
parsing - モノイド構文解析 -- それは何ですか?
Edward Kmettによる「Introduction to Monoids」という名前のスライドから、モノイド解析という用語を偶然見つけました。スライド全体で haskell を使用しています。
今、この用語を検索すると、同じ著者からの言及がほとんどなく、ほとんどの言及しか見つかりませんでした。したがって、この用語はここで説明できると思います。
では、モノイド構文解析は興味深い新しいものですか? リンク先のスライド以外のどこかに表示されていますか? そして最も重要なことは、それは何ですか?スライド自体は、定義を与えたり、強調したりするようには見えませんでした。
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'
関数を機能させるにはどうすれば書き直せますか?
haskell - 空でないモノイドの選択
空でないモノイドを選択する関数が必要です。リストの場合、これは次の動作を意味します。
今、私は実際にそれを実装しましたが、一種の一般的なケースのように見えるため、標準的な代替手段が存在するかどうか疑問に思っています. 残念ながら、Hoogle は役に立ちません。
これが私の実装です:
haskell - 大きなリストに対するモノイドフォールドのスタックオーバーフロー
最初のいくつかimports
、
値のペアを保持しているファンクターがあるとしましょう。
私はこれらの大きなリストを持っています、
その上で、たとえば平均を計算したい
これのいくつかの潜在的な実装は次のとおりです。
残念ながら、これらはすべてスタックオーバーフローを引き起こします。
問題はで過度の怠惰である可能性があると考えてFoldable.foldMap
、より厳密なバリアントを実装してみました、
残念ながら、これもオーバーフローします。
アプローチのクリーンな構造を妥協することなく、これをどのように達成できますか?
アップデート
Fret
厳密なフィールドを作成すると、期待どおりに機能しているように見えます。これがより大きなアプリケーションで機能するかどうかを確認します。
haskell - Haskellでこのツリーのモノイドインターフェースをどのように実装しますか?
用語をご容赦ください、私の心はまだ曲がっています。
ツリー:
いくつかの質問を聞きたいんです:
Ftree
であることができなかった場合、ID 値がないため、Empty
もはや ではありません。Monoid
mappend
このツリーをどのように実装しますか? 勝手に 2 本の木を無造作に接ぎ木できますか?二分探索ツリーの場合、結果
mappend
が依然として BST であることを確認するために、両方のツリーの要素の一部をイントロスペクトする必要がありますか?
記録のために、ここで他のいくつかのことFtree
ができます: