Project Eulerの問題を読んで作業することで、Haskellのプログラミングと学習を行うのは初めてです。もちろん、これらの問題のパフォーマンスを向上させるためにできる最も重要なことは、より優れたアルゴリズムを使用することです。ただし、パフォーマンスを改善するためのシンプルで簡単に実装できる方法が他にもあることは明らかです。大まかに検索すると、この質問とこの質問が表示され、次のヒントが得られます。
- ghc フラグ -O2 および -fllvm を使用します。
- ボックス化されていないため、Integer の代わりに Int 型を使用します (または Int64 の代わりに Integer を使用することもできます)。これには、関数を入力する必要があり、コンパイラーがその場で決定することはできません。
- 分割テストには mod ではなく rem を使用します。
- 必要に応じてシュワルツ変換を使用します。
- 再帰関数でアキュムレータを使用する (末尾再帰の最適化だと思います)。
- メモ化(?)
(1 つの回答では、ワーカー/ラッパーの変換についても言及されていますが、それはかなり進んでいるようです。)
質問:プロジェクト オイラー スタイルの問題のパフォーマンスを向上させるために、Haskell で行うことができる他の簡単な最適化は何ですか? Project Eulerの問題の解決をスピードアップするために使用できる、Haskell固有の(または関数型プログラミング固有の)アイデアや機能は他にありますか? 逆に気をつけるべきことは?避けるべき一般的だが非効率的なことは何ですか?