7 多くの一般的な操作はモノイドです。Haskellはこの観察を利用して、多くの高階関数をより一般的なものにしています(Foldable1つの例です)。 モノイドを使用してパフォーマンスを改善できる1つの明白な方法があります。プログラマーは操作の結合性をアサートしているため、操作を並列化できます。 モノイドを扱っていることを知って、コンパイラーがコードを最適化できる他の方法があるかどうか知りたいです。 optimization compilers category-theory — Xodarap ソース 偶然にも、HLearnライブラリの作者は、これに関する一連の投稿をしています。 — Xodarap 2012年
7 コンパイラーはモノイドを使用して指数を最適化できます。してみましょうような一定の時間内に二項演算子のcalculateableこととモノイドを形成します。次に、操作⊕⊕⊕⊕a1、a2、。。。∈ Aa1、a2、。。。∈あ ⨁[ 1 .. n ]ak=ak⊕ak⊕ ⋯ ⊕akn 回⨁[1 ..ん]ak=ak⊕ak⊕⋯⊕ak⏟ん 回 コンパイラががモノイドの法則に従うことを知っている場合、通常、時間かかるものは、二乗および乗算アルゴリズムで時間でのみ評価できます。O ( n )O(ん)O(ログn )O(ログん)⊕⊕ — FUZxxl ソース 1 素晴らしい観察。おそらく、は時間で計算できると想定していることを指定する必要があります。ak⊕akak⊕akO (1 )O(1) — Zach Langley
0 定数の折りたたみ/定数の伝播ステップにいる場合、モノイドのアイデンティティを見つけたときはいつでも、それが他の非定数式を乗算している場合はそれを無視できます。 — ロベルト・ミゾーニ ソース 私はこれについて考えていました-それが実際に速いかどうか知っていますか? — Xodarap 2012年 たとえば、ループ内で違いが生じる可能性があります。 — Roberto Mizzoni、2012年