関数型プログラミング言語(Haskell / F#/ Caml)のパターンマッチング機能を使用して、同じ値を複数回照合できるかどうか疑問に思いました。
次の例を考えてみてください。
plus a a = 2 * a
plus a b = a + b
最初のバリアントは、関数が2つの類似した値(に格納される)で呼び出されたときに呼び出されますa
。
より便利なアプリケーションはこれです(ASTを単純化する)。
simplify (Add a a) = Mult 2 a
しかし、Haskellはこれらのコードを拒否し、定義の競合についてa
警告します-関数が同じ値を取得したかどうかを確認する代わりに、明示的なcase/if-checksを実行する必要があります。照合したい変数が複数回発生することを示すトリックはありますか?