我一直得到这个错误,我无法解决原因
sumSquares a = map (^2) a . foldr (+) 0
Run Code Online (Sandbox Code Playgroud)
我把数字列表的正方形加起来.
.是函数组合,所以你所说的是,使用函数foldr (+) 0 :: [Int] -> Int并用它组成map (^2) a :: [Int],但这没有任何意义,你在这个组合中的第二个"函数"并不是真正的函数.
你想要的是交换它们并使用应用程序,而不是组合
foldr (+) 0 (map (^2) a)
foldr (+) 0 $ map (^2) a
Run Code Online (Sandbox Code Playgroud)
这可以转换成具有所谓的"eta转换"的组合
sumSquares = foldr (+) 0 . map (^2)
sumSquares = sum . map (^2)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,foldr这里可能是错误的折叠,foldl'会更节省空间.