function - Haskell 模式匹配在负数上失败

标签 function haskell functional-programming pattern-matching

Haskell 编译器在以下函数上抛出错误:

balancedMax :: Int -> Int -> Int
balancedMax -1 _ = -1
balancedMax _ -1 = -1
balancedMax a b = max a b

翻转标志可以解决问题:
balancedMax :: Int -> Int -> Int
balancedMax 1 _ = -1
balancedMax _ 1 = -1
balancedMax a b = max a b

为什么模式匹配在否定上失败,什么是干净的解决方法?

最佳答案

它失败是因为它认为您正在尝试重新定义减号运算符,因为 f -1 = ...被解析为 f - 1 = ... .

要解决此问题,您只需添加括号:

balancedMax :: Int -> Int -> Int
balancedMax (-1) _ = -1
balancedMax _ (-1) = -1
balancedMax a b = max a b

同样的事情也发生在表达式中。调用balancedMax使用否定文字,您还需要括号。

关于function - Haskell 模式匹配在负数上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976543/

相关文章:

haskell - 计算 Haskell 中排序列表中最常出现的数字

java - 为什么我无法在 JAVA 项目中实现 Streams 功能?

javascript - 编辑 Javascript 函数

haskell - iteratee的介绍或简单示例?

c - 在我的函数中出现错误,该函数使用 C 中的指针返回数组中的值

list - Haskell 自引用列表终止

Java 8代码优化——删除if语句

haskell - foldl 是如何工作的?

c - 如何从不同的函数访问 C 中的变量?

c - 如何将参数传递给可变参数宏?