我只是想知道是否可以使用函数式编程语言(Haskell/F#/ Caml)的模式匹配工具多次匹配相同的值.
试想下面的例子:
plus a a = 2 * a
plus a b = a + b
Run Code Online (Sandbox Code Playgroud)
当使用两个相似的值(将存储在其中a)调用函数时,将调用第一个变体.
一个更有用的应用程序就是这个(简化AST).
simplify (Add a a) = Mult 2 a
Run Code Online (Sandbox Code Playgroud)
但是Haskell拒绝这些代码并警告我有相互矛盾的定义a - 我必须做明确的case/if-checks而不是找出函数是否具有相同的值.是否有任何技巧可以表明我想要匹配的变量会多次出现?
f# haskell functional-programming pattern-matching guard-clause