Haskell 有人能解释这个错误吗?
我是Haskell的新手,正在努力解决一些微妙的语法问题。为什么这样好:Haskell 有人能解释这个错误吗?,haskell,syntax,Haskell,Syntax,我是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]”匹配 reduceB
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)) ...
美元的约束力相当弱,但括号胜过一切。reduceBy floor$from integral a/from integral n f++[n]n等同于reduceBy floor from integral a/from integral n f++[n]n。正如第一条评论所示,作为一种风格,每当您需要将参数插入括号时,通常不会将开括号放在函数的正后方,而是放在参数的开头,例如,reduceBy floor。。。而不是地板上的减速器。地板$fromIntegral a/fromIntegral n可以写为'div'n