我正在尝试使用 infixr
、infixl
和 infix
声明。我理解了如何使用 infixr
和 infixl
:
-- Test expression: 40 +++ 20 +++ 50 +++ 10 * 10
-- infixr 8 +++ -- Calculated as: (40 +++ (20 +++ (50 +++ 10))) * 10. Result: 630.
-- infixl 8 +++ -- Calculated as: (((40 +++ 20) +++ 50) +++ 10) * 10. Result: 800.
-- infixr 6 +++ -- Calculated as: 40 +++ (20 +++ (50 +++ (10 * 10))). Result: 75.
-- infixl 6 +++ -- Calculated as: ((40 +++ 20) +++ 50) +++ (10 * 10). Result: 125.
(+++) :: Int -> Int -> Int
a +++ b = a + (b `div` 2)
但是我不理解 infix
关键字的工作原理。我想知道,使用 infix
关键字时是否总是需要用括号指定顺序?如果是这样,为什么数字参数是必要的,考虑到括号具有最高的优先级)?
l/r/<nothing>
)说明如何分组;优先级(1-9
)说明在存在多个不同运算符时如何进行分组。 - Daniel Wagner