【发布时间】:2011-08-29 22:01:41
【问题描述】:
我是 Haskell 的新手,在语法的一些微妙之处苦苦挣扎。为什么会这样:
reduceBy a f n
| n < 2 = (a,f)
| (a `mod` n) == 0 =
reduceBy( floor $ fromIntegral a / fromIntegral n) (f++[n]) n
| otherwise = (a, f)
虽然这有错误:(无法将预期类型 `(a, [a])' 与推断类型 `[a] -> a -> (a, [a])' 匹配)
reduceBy a f n
| n < 2 = (a,f)
| (a `mod` n) == 0 =
reduceBy( floor(fromIntegral a / fromIntegral n) (f++[n]) n )
| otherwise = (a, f)
?
【问题讨论】:
-
reduceBy (floor $ fromIntegral a / fromIntegral n) (f++[n]) n等价于reduceBy (floor (fromIntegral a / fromIntegral n)) (f++[n]) n。 -
正如第一条评论还显示的那样,作为一种风格,每当您需要为参数加上括号时,开括号通常不会放在函数之后,而是放在参数的开头,例如
reduceBy (floor (...而不是reduceBy( floor( ...。 -
附注
( floor $ fromIntegral a / fromIntegral n)可以写成(a `div` n)