Я просто задавался вопросом, можно ли несколько раз сопоставлять одни и те же значения с возможностями сопоставления шаблонов языков программирования (Haskell/F #/Caml).
Просто подумайте о следующем примере:
plus a a = 2 * a
plus a b = a + b
Первый вариант будет вызываться, когда функция вызывается с двумя одинаковыми значениями (которые будут сохранены в a
).
Более полезным приложением было бы это (упрощение AST).
simplify (Add a a) = Mult 2 a
Но Haskell отклоняет эти коды и предупреждает меня о конфликтующих определениях для a
. Я должен делать явные case/if-checks вместо этого, чтобы узнать, получили ли функция одинаковые значения. Есть ли какой-либо трюк, указывающий, что переменная, которую я хочу сопоставить, будет происходить несколько раз?