Haskellでのパターンマッチングの効率に興味があります。パターンマッチングがネストされたif
/case
ステートメントよりも優れているという単純なケースは何ですか?
ご協力いただきありがとうございます。
Haskellでのパターンマッチングの効率に興味があります。パターンマッチングがネストされたif
/case
ステートメントよりも優れているという単純なケースは何ですか?
ご協力いただきありがとうございます。
Haskellではcase
、パターンマッチングは密接に関連しています。あなたはもう一方なしで一方を持つことはできません。 if p then e1 else e2
のシンタックスシュガーですcase p of { True -> e1; False -> e2 }
。これらの理由から、あなたが求める例を作成することは不可能だと思います。Core Haskellでは、すべてがと同等case
です。
MLファミリーの言語では、オプティマイザーは複雑なパターンの一致で非常に印象的なことを実行できることがよくあります。これはHaskellコンパイラにとってより困難です。遅延評価のため、パターンマッチコンパイラは特定のテストを並べ替えることができません。言い換えれば、case
ステートメントをさまざまな方法でネストすると、パフォーマンスが異なる可能性がありますが、Haskellではセマンティクスも異なります。したがって、一般的にコンパイラはそれを台無しにしません。
独自のコードを作成する方法に関しては、大文字と小文字を区別する式が最も少ないコードが最適であると考えるのが安全です(1つif
は1つの大文字と小文字の表現に相当することに注意してください)。
私はこれを確認しませんでしたが、コンパイラーによってコアHaskellに変換されると、両方の形式がネストされたケースオブ式になると思います。調べるための最良の方法は、コンパイラ自体に尋ねることです。GHCでは、引数を使用してコア中間プログラムのダンプをオンにできます。