【发布时间】:2010-11-13 19:42:29
【问题描述】:
我只是想知道是否可以使用函数式编程语言 (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 来确定函数是否具有相同的值。有什么技巧可以表明我要匹配的变量会出现多次吗?
【问题讨论】:
-
FWIW,Mathematica 支持这一点。
标签: haskell f# functional-programming pattern-matching guard-clause