我正在尝试在haskell中使用警卫进行分类
分类 n:根据以下模式返回基于数字等级的字母等级:
- 如果 n ? 90,返回'A'
- 如果 89 ? ? 70,返回'B'
- 如果 69 ? ? 50,返回'C'
- 否则,返回“D”。
这是我的 Haskell 代码:
classify n
| n => 90 = 'A'
| 89 <= n <= 70 = 'B'
| 69 <= n <= 50 = 'C'
| otherwise = 'D'
但它不断给我错误
回答
对于大于或等于,>=使用的是,不是,此外,您不能像在 Python 中那样链接条件,因此您应该使用=>89 >= n && n >= 70:
classify n
| n >= 90 = 'A'
| 89 >= n && n >= 70 = 'B'
| 69 >= n && n >= 50 = 'C'
| otherwise = 'D'
您可以将表达式简化为:
classify n
| n >= 90 = 'A'
| n >= 70 = 'B'
| n >= 50 = 'C'
| otherwise = 'D'
这适用于整数,因为守卫n >= 90会为大于或等于 90 的所有值触发。这意味着不会为下一个守卫评估此类值,其他守卫只会评估小于或等于 89 的整数。