1

我正在编写几个相互递归的模式匹配函数,我希望能够交错它们的定义,例如

recA [pattern ...] = [.. something that might call recB with the next pattern ..]
recB [pattern ...] = ...
recA [other ...]   = ...
...b

等等这可能吗?有没有更惯用的替代方法?

4

1 回答 1

6

Haskell 2010 报告,第 4.4.3.1 节函数绑定

请注意,定义函数的所有子句必须是连续的,并且每个子句中的模式数量必须相同。

所以你不能像你recArecB例子那样交错。

没有理论上的原因(我可以看到)为什么编译器不能将各种子句组合在一起;我怀疑引入这条规则是为了防止人为错误和混乱。作为一个愚蠢的例子,以下有什么问题?

function1 [] = "a"
functionl (x:xs) = "b"
function1 (x:y:xs) = "c"
于 2013-03-21T16:01:17.500 回答